我有一个关于如何从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会立即删除吗?
答案 0 :(得分:1)
不同之处在于第一种方式检查cookie是否存在于客户端中然后将其删除,并且第二种方式直接删除cookie而不检查它是否存在于客户端中。从逻辑上讲是对的,对吧?最终,它们具有相同的效果:告诉浏览器删除与给定名称(和路径)相关联的cookie。
您似乎以某种方式假设Cookie
返回的getCookies()
实例代表浏览器本身正在使用的实际 Cookie,并且您必须使用完全该cookie实例,以便能够删除它。这种假设是完全错误的。它只是浏览器在请求标头中发送的cookie的抽象。您可以完美地创建一个新的Cookie
实例,只要它使用完全相同的名称和路径。
答案 1 :(得分:0)