为什么session.invalidate在IE浏览器中不起作用?

时间:2010-10-26 08:52:24

标签: java session servlets servlet-filters

我在我的应用程序中实现了一个sevlet过滤器,在过滤器中,如果我找到一些特定的url模式,我将使用request.getSession()。invalidate()来注销并清除会话,然后重定向到登录页面

session.invalidate();
session.setAttribute("hi", true);
response.sendRedirect("login.jsp");

但是我发现,之后我输入了用户名和密码,然后提交登录表单,之前的会话似乎没有完全清除。

那么有可能让我彻底清理会话,就像启动一个新的IE实例一样吗?(BTY,我的代码在FF和Chrome中运行)。

3 个答案:

答案 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);

}