【问题标题】:Java cookies removed in firefox, but not in Google or IEJava cookie 在 Firefox 中被删除,但在 Google 或 IE 中没有
【发布时间】:2012-12-01 21:16:54
【问题描述】:

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

【问题讨论】:

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


    【解决方案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");
    

    【讨论】:

    • 我尝试了 response.addHeader ,但也没有用。我觉得 Firefox 删除 cookie 而 Chrome 和 IE 没有删除 cookie 很奇怪
    • 我现在获得了适用于 Chrome 和 Firefox 的 Live HTTP Headers。我要检查正在传递的内容...
    【解决方案2】:

    This SO question表示解决方法可能是调用setHttpOnly(true)

    【讨论】:

    • 谢谢...不幸的是,这并没有解决问题。 Cookie 仍然存在
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 2021-12-12
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    相关资源
    最近更新 更多