当我的应用程序中的用户登录/注销显示上次访问的用户名时,我遇到使用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。
答案 0 :(得分: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.
您正在错误的页面上设置缓存标头。您需要在需要登录的所有页面上设置它们,而不仅仅是在注销后出现的页面上。您需要创建Filter
来执行doFilter()
方法中的响应标头设置作业,然后将过滤器映射到覆盖需要登录的页面的URL模式,例如/app/*
,{{ 1}}等等。
无关,请勿使用/secured/*
,而只使用不带布尔值的request.getSession(false)
。