jsp之FF , Tomcat 中的 session 失效

落叶无声 阅读:65 2025-05-04 20:05:19 评论:0

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

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

<%@ 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(); 
  %> 

请您参考如下方法:

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

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 .响应 header 需要在 Filter 中设置,注销需要在 Servlet 中(间接地)发生。
  • 使用 false 调用 getSession(false) 可能会返回一个 null session ,这又会导致 NullPointerException 在某些情况下。摆脱 false 或至少添加一个 nullcheck。
  • 在调用 invalidate() 之前将属性设置为 null 是不必要的。 invalidate() 调用已经破坏了所有属性。

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


标签:Tomcat
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号