Http ServletResponse.reset()是阻止未经授权(注销)用户访问servlet的可行方法吗?
我想知道Http ServletResponse.reset()是阻止未经授权(注销)用户访问servlet的可行方法吗?,http,servlets,session-cookies,servlet-filters,session-state,Http,Servlets,Session Cookies,Servlet Filters,Session State,我想知道ServletResponse.reset()是否是阻止未登录用户访问servlet的额外步骤,或者是否存在风险或缺点 背景: 按照这种方式,最初用户只能在创建帐户并使用这些凭据登录后才能看到某些页面。我最初遇到的问题是,即使我使用了session.invalidate(),当用户注销时,他们可以重新发送请求(例如,通过“后退”按钮),并且能够从未经授权的状态访问受限内容。假设会话已过期,如上所述,我甚至不确定这是怎么可能的,或者可以采取什么适当的措施来防止它 通过实验,作为一种解决方法
ServletResponse.reset()
是否是阻止未登录用户访问servlet的额外步骤,或者是否存在风险或缺点
背景:
按照这种方式,最初用户只能在创建帐户并使用这些凭据登录后才能看到某些页面。我最初遇到的问题是,即使我使用了session.invalidate()
,当用户注销时,他们可以重新发送请求(例如,通过“后退”按钮),并且能够从未经授权的状态访问受限内容。假设会话已过期,如上所述,我甚至不确定这是怎么可能的,或者可以采取什么适当的措施来防止它
通过实验,作为一种解决方法,我尝试了ServletResponse.reset()
,这似乎解决了问题,但我不明白它为什么会起作用,因此,我不相信它是一个可靠可行的解决方案
我的具体问题是:
- 重置响应缓冲区(包括标头和http状态代码)是安全的还是推荐的做法,还是有更好的方法
- 与使用会话cookie相比,如何管理使用会话对象登录
ServletResponse.reset()
会伤害任何东西,但它不是标准操作程序,也不应该是必要的。只需确保在失效和验证会话时都做了正确的事情
使会话无效:
- 调用
以删除绑定到会话的会话属性,但也要确保代码明确删除了它自己对上一个会话状态的陈旧引用。通过使用精确匹配条件定位cookie并将其最大期限设置为0,可以显式删除会话cookiesession.invalidate()
- 进行身份验证时,可以检查
是否返回null以确定是否存在活动会话。如果是这样,则可以使其无效,还可以检查getSession(false)
,或者明确检查会话管理方案中使用的任何特定属性是否存在。这将允许您正确验证会话的状态request.isRequestedSessionIdValid()
返回一个新会话。如果create为false且请求没有有效的HttpSession,则此方法返回null
要确保会话得到正确维护,必须在提交响应之前调用此方法
正在使用Cookie来维护会话完整性,并在响应失败时被要求创建新会话 如果已提交,则抛出非法状态异常