0

我有一个关于如何从 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 myCookie = new Cookie("cookie_name", "");
response.addCookie(myCookie);

? cookie 是否会被立即删除?

4

2 回答 2

1

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

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

于 2013-08-13T14:51:09.250 回答
0

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

在设置新的 cookie 之前,您可以自行删除cookie,否则您的应用程序行为未定义

最好删除。

于 2013-08-13T14:46:54.600 回答