在Firefox中删除了Java cookie,但在Google或IE中没有删除

时间:2012-12-13 21:48:59

标签: java internet-explorer google-chrome spring-mvc session-cookies

我有以下代码尝试从浏览器中删除一些JSESSIONID Cookie。

String[] cookieList = "/App1/,/App2/,/App3/".split(",");



for (int i = 0; i < cookieList.length; i++) {

     String cookiePathString = cookieList[i];
     response.setContentType("text/html");
     Cookie cookieToKill = new Cookie("JSESSIONID", "No Data");
     cookieToKill.setDomain(getCookieDomainName("myDomain.com"));
     cookieToKill.setMaxAge(0);
     cookieToKill.setPath(cookiePathString);
     cookieToKill.setComment("EXPIRING COOKIE at " + System.currentTimeMillis());
     response.addCookie(cookieToKill);
}

代码在Firefox中运行正常,并删除JSESSIONID。在Chrome和IE中它没有。您需要做些什么来使IE和Chrome中的这些会话cookie失效?

这是在运行Java 7的Tomcat上的Spring MVC应用程序中运行

2 个答案:

答案 0 :(得分:1)

Cookie完全搞砸了。

服务器的最佳做法:

  1. 使用Set-Cookie,而不是Set-Cookie2。
  2. 如果有多个Cookie,请为每个Cookie使用单独的Set-Cookie标头。
  3. 使用Expires,而不是Max-Age。
  4. 使用日期格式:Sun, 06 Nov 1994 08:49:37 GMT
  5. 例如:

    Set-Cookie: JSESSIONID=NO_DATA; Path=/App1/; Domain=myDomain.com; Expires=Thu, 01 Jan 1970 00:00:00 GMT
    

    我建议你做什么:

    1. Cookie值中没有空格。
    2. 致电cookie.setVersion(0);
    3. 如果仍然没有运气,请忘记Cookie课程,尝试手动设置http标头

      response.addHeader("Set-Cookie", 
          "JSESSIONID=NO_DATA; Path=/App1/; Domain=myDomain.com; Expires=Thu, 01 Jan 1970 00:00:00 GMT");
      

答案 1 :(得分:0)

This SO question表示解决方案可能是致电setHttpOnly(true)