1

我有以下代码试图从我的浏览器中删除一些 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 应用程序中运行的

4

2 回答 2

1

Cookie 完全搞砸了。

服务器的最佳实践:

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

例如:

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

如果还是不走运,忘记Cookie上课,试试手动设置http头

response.addHeader("Set-Cookie", 
    "JSESSIONID=NO_DATA; Path=/App1/; Domain=myDomain.com; Expires=Thu, 01 Jan 1970 00:00:00 GMT");
于 2012-12-13T23:34:31.680 回答
0

这个 SO question表明解决方案可能是调用setHttpOnly(true).

于 2012-12-13T22:02:26.207 回答