我有以下代码试图从我的浏览器中删除一些 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 的这些 session cookie 过期?
它在运行 Java 7 的 Tomcat 上的 Spring MVC 应用程序中运行
最佳答案
Cookie 完全搞砸了。
服务器的最佳实践:
- 使用 Set-Cookie,而不是 Set-Cookie2。
- 如果有多个 Cookie,请为每个 Cookie 使用单独的 Set-Cookie header 。
- 使用 Expires,而不是 Max-Age。
- 使用日期格式:
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
我可以建议你做什么:
- Cookie 值中不要有空格。
- 调用
cookie.setVersion(0);
如果仍然不行,请忘记Cookie
类,尝试手动设置http header
response.addHeader("Set-Cookie",
"JSESSIONID=NO_DATA; Path=/App1/; Domain=myDomain.com; Expires=Thu, 01 Jan 1970 00:00:00 GMT");
关于Java cookie 在 Firefox 中被删除,但在 Google 或 IE 中未被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13869060/