在Sun one Applications服务器7.1中使会话无效

时间:2011-11-19 12:48:50

标签: jsp session servlets browser-cache

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

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

当用户点击应用程序中的loggout时。我写了代码

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。

1 个答案:

答案 0 :(得分:1)

有两个问题:

  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/*,{{ 1}}等等。

  3. 另见:


    对具体问题

    无关,请勿使用/secured/*,而只使用不带布尔值的request.getSession(false)