删除cookie的方法

时间:2013-08-13 14:37:49

标签: java servlets cookies

我有一个关于如何从servlet中删除cookie的问题。我们假设客户端已经有我的servlet发送的cookie,删除它的一个解决方案是将cookie的最大年龄设置为0.但是设置它的区别是什么:

Cookie[] cookies = request.getCookies();
if (cookies != null) {
    for (int i = 0; i < cookies.length; i++) {
        if (cookies[i].getName().equals("cookie_name")) {
            cookies[i].setMaxAge(0);
            response.addCookie(cookies[i]);
        }
    }
}

或发送新的Cookie并覆盖旧的Cookie,如

Cookie myCookie = new Cookie("cookie_name", "");
response.addCookie(myCookie);

?并且cookie会立即删除吗?

2 个答案:

答案 0 :(得分:1)

不同之处在于第一种方式检查cookie是否存在于客户端中然后将其删除,并且第二种方式直接删除cookie而不检查它是否存在于客户端中。从逻辑上讲是对的,对吧?最终,它们具有相同的效果:告诉浏览器删除与给定名称(和路径)相关联的cookie。

您似乎以某种方式假设Cookie返回的getCookies()实例代表浏览器本身正在使用的实际 Cookie,并且您必须使用完全该cookie实例,以便能够删除它。这种假设是完全错误的。它只是浏览器在请求标头中发送的cookie的抽象。您可以完美地创建一个新的Cookie实例,只要它使用完全相同的名称和路径。

答案 1 :(得分:0)

AFAIAK,没有证据表明方法addCookie不会检查重复的Cookie。

您需要删除cookie,然后才能设置新的{{3}},否则您应用的行为未定义

最好删除。