我正在使用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();
%>
答案 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问题。
与实际问题无关,我对这段代码有一些评论:
Filter
中设置,注销需要(间接)在Servlet
中进行。getSession(false)
致电false
可能会返回null
会话,而这会在某些情况下导致NullPointerException
。摆脱false
或至少添加一个nullcheck。null
之前将属性设置为invalidate()
是不必要的。 invalidate()
调用已经破坏了所有的属性。希望你从中学到一些东西。