【问题标题】:Invalidating session in Sun one Applications server 7.1Sun one Applications server 7.1 中的会话无效
【发布时间】:2011-11-19 12:48:49
【问题描述】:

当我的应用程序中的用户登录/注销显示上次访问的用户名时,我在使用 Servlet 和 JSP 的会话中遇到问题。当用户成功登录应用程序时,我将用户信息放入会话中,例如

HttpSession ssession=request.getSession(false);
session.setattribute(username,"username");

当用户在应用程序中单击注销时。我写了代码

HttpSession ssession=request.getSession(false);

if(session!=null){
   session.invalidate();
}

response.setHeader("Pragma", "cache"); 
response.setHeader("Cache-Control", "private, must-revalidate"); 

我在用户注销时检查会话是否可用。会话无效。但是用不同的用户重新登录同一个浏览器。我得到了 lastaccess 会话用户。我已经为登录页面和加载页面设置了respone.setheader。我遇到了同样的问题。此问题仅发生在客户端(生产服务器)。我们正在使用 Sun One 应用服务器 7.1。

【问题讨论】:

  • 我不明白会发生什么。请发布真实代码(您发布的无法编译),说明您正在尝试做什么,您希望代码做什么,以及它实际上做了什么。

标签: jsp session servlets browser-cache


【解决方案1】:

有2个问题:

  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.
    
  2. 您在错误的页面上设置了缓存标头。您必须在需要登录的所有页面上设置它们,而不仅仅是在注销后出现的页面上。您需要创建一个Filter,它在doFilter() 方法中执行响应标头设置工作,然后将过滤器映射到覆盖需要登录的页面的URL 模式,例如/app/*/secured/* 等。

另见:


与具体问题无关,不要使用request.getSession(false),而只需使用不带布尔值的request.getSession()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 2012-07-26
    • 2018-08-05
    • 1970-01-01
    相关资源
    最近更新 更多