我有一个关于如何从 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是否会立即删除?
最佳答案
区别在于,第一种方式是检查客户端中是否存在cookie,然后将其删除,第二种方式是直接删除cookie,而不检查客户端中是否存在。从逻辑上讲是有道理的,对吧?最终,它们具有相同的效果:告诉浏览器删除与给定名称(和路径)关联的 cookie。
您似乎以某种方式假设 getCookies()
返回的 Cookie
实例代表浏览器本身正在使用的实际 cookie,并且您必须准确使用该 cookie 实例才能将其删除。这种假设是完全错误的。它只是浏览器在请求 header 中发送的 cookie 的抽象。您可以完美地创建一个新的 Cookie
实例,只要它使用完全相同的名称和路径即可。
关于java - 删除cookie的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18212058/