【问题标题】:How to invalidate browser session如何使浏览器会话无效
【发布时间】:2011-07-20 05:55:31
【问题描述】:

如何使浏览器会话无效。我正在使用 JSP。 在web.xml 中,session-timeout 被设置为 180 秒,我只想要这样。但问题是在某些特殊情况下,某些用户的浏览器会话需要在表单提交后立即失效。

我已经使用session.invalidate(); 使会话无效并且还使用了

response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);

但是,当我单击后退按钮时,它仍会将我带到相同的用户会话。这是从浏览器缓存加载的吗?

这就是我的 JSP 中的内容:

<head>
<script type="text/javascript">
function submitForm(){window.document.submitFrm.submit();}
</script>
</head>
<body onload="submitForm()">
<%String output = (String)(request.getAttribute("strOut"));
String hookUrl = (String)(request.getAttribute("hookUrl"));
System.out.println("hookUrl in cwsGroup.jsp : "+hookUrl);%>
<form method="post" action="<%=hookUrl%>" name="submitFrm" id="submitFrm">
<input type="hidden"  name="cxml-urlencoded" value='<%=output%>' />
</form>
<%
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
response.setDateHeader( "Expires", 0 );
session.removeValue("domineName");
session.invalidate();%>
</body>

我错过了什么吗?

【问题讨论】:

  • 它看起来像浏览器缓存。单击后退按钮后,尝试向您的 URL 添加一个随机数,例如 rand=234234 并刷新。如果它没有重定向到登录页面(如果你有身份验证设置),那么你的验证会话就不会发生。可能正在加载表单时,您可以使用 AJAX 心跳来检查您是否仍处于活动会话中,是否可以击败浏览器缓存。

标签: java jsp session browser invalidation


【解决方案1】:

这些标题不完整。这只能在 Internet Explorer 中工作,但在其他人中会失败。整套是

response.setHeader("Cache-Control","no-cache,no-store,must-revalidate");
response.setHeader("Pragma","no-cache");
response.setDateHeader("Expires", 0);

您还需要在上一个 JSP 页面中设置它们。在 JSP 中调用它只会禁用缓存 current JSP 页面。您需要将它复制粘贴到所有 JSP 页面上(颤抖)。或者更好的是,使用映射到*.jspFilter。示例见this answer

【讨论】:

  • 当用户执行注销时,我在 My LogoutAction 类中使用上述解决方案,我在 Mozill Firefox 17.0.1 中对此进行了测试。我编写了上述所有标题,然后使会话无效。执行注销操作后,页面被转发到登录页面,然后我按浏览器的后退按钮,它显示仪表板或我执行注销操作的最后一页。任何帮助或应该发布另一个问题吗?
  • @Mihir:需要在您想要关闭浏览器缓存的响应上设置这些标头。仅将它们设置在注销操作的响应上显然不会将它们设置在以前发送的所有其他响应上。
  • 那么要怎么做才能实现我的目标呢?我应该再问你一个问题吗?
【解决方案2】:

正如您所说,单击后退按钮会话正在失效。所以请在返回按钮事件上使会话无效。

请在代码 sn-p 的第一行和 lasr 行添加"&lt;" "&gt;"

<script type="text/javascript">

      bajb_backdetect.OnBack = function()
      {

        alert('You clicked it!');

      }

<script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 2020-08-23
    • 2023-03-30
    • 2021-04-03
    • 2023-03-09
    • 2023-03-12
    • 2018-09-20
    相关资源
    最近更新 更多