【问题标题】:Logout problem!注销问题!
【发布时间】:2011-04-07 06:31:48
【问题描述】:

我有大约 30 个带有登录和注销功能的 jsp 页面。我已经将所有页面都放在了 Session 中,这样只有有效的用户才能访问。现在的问题是,每当用户点击注销时,会话就会失效,但如果用户按下浏览器的后退按钮,它仍然会显示受保护的页面(不应显示)。

我知道问题出在保存缓存和历史记录的浏览器上。所以我在安全页面上应用了response.setheader("cache-control",.....) 等,在安全页面的正文中也应用了window.history.go(+1)

它在某种程度上可以正常工作,但偶尔会显示受保护的页面。而且一旦用户登录会话开始并且当他将在网站内时,后退按钮应该对他没有任何麻烦(不会提示用户重新发送表单数据)。一旦他注销会话应该结束并且他应该不能再通过点击返回按钮来访问页面。有什么方法可以实现吗?

【问题讨论】:

  • 使某物安全与使其不可见
  • @ralu,+1。 @Mahesh,您将安全性(即有关会话的全部内容)与用户是否可以“看到”过去的页面混淆了。它与缓存无关,它真正控制浏览器是否可以避免首先访问您的网站,而只是为您的用户提供他看到的“最后”页面。所有这些都与用户注销后是否可以对您的网站做任何有用的事情无关。

标签: java jsp servlets jakarta-ee


【解决方案1】:

1为了检查用户是否已通过身份验证,请勿在 jsp 上使用代码,我们有 Filter 仅用于使用它。

2让您的Filter 执行以下操作以解决缓存问题

HttpServletResponse hsr = (HttpServletResponse) response;
hsr.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
hsr.setHeader("Pragma", "no-cache"); // HTTP 1.0.
hsr.setDateHeader("Expires", 0); // Proxies.
chain.doFilter(request, response);

3 移除 javascript

【讨论】:

猜你喜欢
  • 2011-01-05
  • 2012-02-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
相关资源
最近更新 更多