FF,Tomcat中的会话失效

时间:2010-08-28 17:25:35

标签: jsp session tomcat6

我正在使用Tomcat web容器。我有一个管理控制台应用程序实现。当我单击logout时,会话属性为null并且无效,请参阅我的logout.jsp文件中的以下代码。 注销后,用户将进入登录页面。在fireFox我单击后退按钮我有以下问题。 首先,我没有像在IE中那样获得页面过期页面 第二,当我点击页面中的任何一个链接时,我检查sessioon属性,我在注销时使其为null。价值就是“成功”。 我完全对这种行为感到困惑。它是firefox还是tomcat会话管理的问题。

我确信我需要更多的知识才能理解这种行为。感谢您的帮助,让我知道这里发生了什么......

<%@ page session="false" %>
<%
response.setHeader("cache-control","no-cache");
response.setHeader("Pragma","no-cache");
response.setDateHeader("Expires",-1);

%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <% 
    HttpSession session = request.getSession(false);
    System.out.println("session"+session);
    session.setAttribute("loginStatus",null);
    session.invalidate();
  %>

1 个答案:

答案 0 :(得分:4)

标题不完整。您需要以下一组标题:

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

特别是must-revalidate条目修复了这个特殊的FF问题。

另见


与实际问题无关,我对这段代码有一些评论:

  • 您应该更喜欢UTF-8而不是ISO-8859-1来获得world domination
  • JSP页面中的原始Java代码是poor practice。响应标头需要在Filter中设置,注销需要(间接)在Servlet中进行。
  • 使用getSession(false)致电false可能会返回null会话,而这会在某些情况下导致NullPointerException。摆脱false或至少添加一个nullcheck。
  • 在调用null之前将属性设置为invalidate()是不必要的。 invalidate()调用已经破坏了所有的属性。

希望你从中学到一些东西。