【问题标题】:Session invalidation in FF , TomcatFF , Tomcat 中的会话失效
【发布时间】:2010-08-28 17:25:34
【问题描述】:

我正在使用 Tomcat Web 容器。我实现了一个管理控制台应用程序。当我单击注销时,会话属性为空并无效,请参阅我的 logout.jsp 文件中的以下代码。 注销后,用户被带到登录页面。在fireFox中,我点击后退按钮我有以下问题。 首先,我没有像在 IE 中那样获得页面过期页面 其次,当我单击页面中的任何链接时,我会检查我在注销时设置为 null 的 session 属性。其价值在于“成功”。 我完全对这种行为感到困惑。是 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();
  %>

【问题讨论】:

    标签: jsp session tomcat6


    【解决方案1】:

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

    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 问题。

    另见


    与实际问题无关,我对这段代码有几个cmet:

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

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

    【讨论】:

    • 您好 BalusC,感谢您分享您的专业知识和善意的建议。我很感谢你。
    猜你喜欢
    • 1970-01-01
    • 2012-12-07
    • 2013-06-29
    • 2017-03-26
    • 2014-11-06
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 2015-04-26
    相关资源
    最近更新 更多