我在我的应用程序中实现了一个sevlet过滤器,在过滤器中,如果我找到一些特定的url模式,我将使用request.getSession()。invalidate()来注销并清除会话,然后重定向到登录页面
session.invalidate();
session.setAttribute("hi", true);
response.sendRedirect("login.jsp");
但是我发现,之后我输入了用户名和密码,然后提交登录表单,之前的会话似乎没有完全清除。
那么有可能让我彻底清理会话,就像启动一个新的IE实例一样吗?(BTY,我的代码在FF和Chrome中运行)。
答案 0 :(得分:1)
会话是服务器端概念。浏览器只持有一个jsessionid来告诉服务器要为此请求获取哪个会话对象。
那说,你的问题不是IE。即使它是,它也是你面临的某种缓存。清除缓存。您可以设置这些响应标头:
Cache-Control: no-cache, no-store
Pragma: no-cache
答案 1 :(得分:0)
@Bozho一个快速提问的问题。 JSP创建了默认会话implict对象。在这种情况下,他创建了一个会话,然后在失效后无效,他设置了再次使用隐式会话创建的属性。
答案 2 :(得分:0)
我知道这是一个老帖子。 但最近我遇到了同样的问题。
我尝试session.invalidate()....并且不起作用。 我尝试删除coockies而不是工作...
问题是Internet Explorer缓存..我只是在我的serlevt响应上没有缓存标题,然后为我工作。
示例代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setHeader("Cache-Control","no-store"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0);
......
......
response.response.getWriter().print(json);
}