【问题标题】:Setting maxage(0) to cookie in HTTPServlet doPost() and redirecting doesn't work在 HTTPServlet doPost() 中将 maxage(0) 设置为 cookie 并重定向不起作用
【发布时间】:2011-12-19 23:03:03
【问题描述】:

我正在做一些非常简单但不起作用的事情。

我有一个带有一个按钮的 html 页面,该按钮应该注销并删除登录 cookie,当按下时,它/在 servlet 中运行此代码:

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
        IOException {
    deleteCookie(req, resp);

    resp.sendRedirect("login");

}

private void deleteCookie(HttpServletRequest req, HttpServletResponse resp) {
    Cookie[] cookies = req.getCookies();

    if (cookies != null) {
        for (Cookie cookie : cookies) {

            if (CID_KEY_NAME.equals(cookie.getName())) {
                cookie.setMaxAge(0); // Should make the browser delete the cookie
                cookie.setValue(null);
                resp.addCookie(cookie);

            }
        }
    }
}

sendRedirect("login") 将我发送到一个负责登录的新 servlet,但是当我到达新 servlet 并检查上面的 cookie 是否存在时,我可以看到它的 maxage 值为 -1

我做错了吗?

【问题讨论】:

    标签: java http cookies


    【解决方案1】:

    根据HTTP Cookies: What's the difference between Max-age and Expires?,至少Internet Explorer 6、7和8不支持Max-Age,但确实支持Expires。如果这是您的问题,那么我会尝试将这两个设置为:

    问。如果我在 cookie 中同时设置 expires 和 max-age 会怎样?

    A.每个支持 max-age 的浏览器都会忽略 expires 而不管它的值是多少,同样,Internet Explorer 也会忽略 max-age 而只使用 expires。

    该页面还有一个指向cookie persistence test page 的链接,您可能会觉得它很有用。

    【讨论】:

    • 感谢您的信息。我无法验证它,因为我看不到如何在 Java Cookie (javax.servlet.http.Cookie) 中定义“过期”选项。
    • 您可以使用 Live HTTP Headers、Firebug 的网络面板等工具(在 Firefox 中)来获取整个 HTTP 交换。虽然这不会帮助您设置值,但它会告诉您正在交换的确切 cookie 值,这可能会提供有关问题所在的线索。
    • 你对 Expires 标签是正确的,但我发现了真正的问题,那就是我没有设置路径。我猜 Java 知道自己设置正确的属性
    【解决方案2】:

    IE 的解决方案是我应该设置路径来设置 cookie 和删除它。

    Chrome 没有路径也没问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-14
      • 2018-10-28
      • 2014-11-21
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 2016-05-10
      • 2018-05-31
      相关资源
      最近更新 更多