FF、Tomcat 中的会话失效

发布于 2024-09-16 06:01:37 字数 799 浏览 6 评论 0原文

我正在使用 Tomcat Web 容器。我实施了一个管理控制台应用程序。当我单击“注销”时,会话属性将变为空并失效,请参阅我的 logout.jsp 文件中的以下代码。 注销后,用户将进入登录页面。在 fireFox 中,我单击后退按钮,但遇到以下问题。 首先,我没有像 IE 那样获得页面过期页面 其次,当我单击页面中的任何链接时,我会检查在注销时将其设置为空的 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();
  %>

I am using Tomcat web container. I have an admin console app implemented. When I click on logout a session attribute is made null and invalidated see the below code in my logout.jsp file.
After logout the user is taken to the login page. In fireFox I click back button I have the below issues.
First I do not get page expired page like in IE
Second when I click on any of the link in the page , I check for the sessioon attribute which I made null in logout. The value of that is "success".
I am totally confused with this behaviour. Is it issue with firefox or tomcat session management.

I am sure I need more knowledge to understand this behaviour. Appreciate your help in letting me know what happens here...

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

少女净妖师 2024-09-23 06:01:37

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

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,以获得 世界统治
  • JSP 页面中的原始 Java 代码是不良做法。响应标头需要在 Filter 中设置,并且注销需要在 Servlet 中(间接)发生。
  • 使用 false 调用 getSession(false) 可能会返回 null 会话,而这又可能在某些情况下导致 NullPointerException情况。摆脱 false 或至少添加一个 nullcheck。
  • 在调用 invalidate() 之前将属性设置为 null 是不必要的。 invalidate() 调用已经废弃了所有属性。

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

The headers are incomplete. You need the following set of headers:

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.

Escpecially the must-revalidate entry fixes this particular FF issue.

See also


Unrelated to the actual problem, I've a few comments about this piece of code:

  • You should prefer UTF-8 over ISO-8859-1 to gain world domination.
  • Raw Java code in a JSP page is poor practice. The response headers needs to be set in a Filter and the logout needs to happen (indirectly) in a Servlet.
  • Calling getSession(false) with false may return a null session which in turn can lead to a NullPointerException in certain circumstances. Get rid of false or at least add a nullcheck.
  • Setting attribute to null right before calling invalidate() is unnecessary. The invalidate() call already trashes all the attribtues.

Hope you learn something from this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文