Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp 正在使Sun one Applications server 7.1中的会话无效_Jsp_Session_Servlets_Browser Cache - Fatal编程技术网

Jsp 正在使Sun one Applications server 7.1中的会话无效

Jsp 正在使Sun one Applications server 7.1中的会话无效,jsp,session,servlets,browser-cache,Jsp,Session,Servlets,Browser Cache,当应用程序中的用户登录/注销显示上次访问的用户名时,我在使用servlet和JSP的会话中遇到了一个问题。当用户成功登录应用程序时,我将用户信息放入会话中,如 HttpSession ssession=request.getSession(false); session.setattribute(username,"username"); 当用户在应用程序中单击loggout时。我写了代码 HttpSession ssession=request.getSession(false); if(

当应用程序中的用户登录/注销显示上次访问的用户名时,我在使用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"); 
我检查了用户注销时会话是否可用。会话无效。但使用不同的用户重新登录同一浏览器。我找到了上次访问会话的用户。我已经为登录页面和加载页面设置了respone.setheader。我也有同样的问题。此问题仅在客户端(生产服务器)中发生。我们正在使用Sun One application server 7.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.
    
  • 您在错误的页面上设置了缓存头。您必须在所有需要登录的页面上设置它们,而不仅仅是在注销后出现的页面上。您需要创建一个
    过滤器
    ,它在
    doFilter()
    方法中执行响应头设置工作,然后将过滤器映射到URL模式上,该模式覆盖需要登录的页面,例如
    /app/*
    /secured/*

  • 另见:
    • (更多背景资料)
    • (包含过滤器示例)


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

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