如何使浏览器会话无效

时间:2011-03-22 06:29:36

标签: java jsp session browser invalidation

如何使浏览器会话无效。我正在使用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>

我错过了什么吗?

2 个答案:

答案 0 :(得分:4)

这些标题不完整。这只适用于Internet Explorer,但在其他情况下会失败。完整的设置是

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

您还需要在之前的 JSP页面中设置它们。在JSP中调用此方法只会禁用当前 JSP页面的缓存。您需要在所有JSP页面上进行复制( shudder )。或者更好的是,使用Filter来映射*.jsp。有关示例,请参阅this answer

答案 1 :(得分:1)

正如您所说,点击后退按钮会话无效。因此,请在后退按钮事件中使会话无效。

请在代码段中添加"<" ">"第一行和lasr行

<script type="text/javascript">

      bajb_backdetect.OnBack = function()
      {

        alert('You clicked it!');

      }

<script>