java - 删除cookie的方法

标签 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 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/

相关文章:

java - HttpSessionAttributeListener 是否异步处理?

java - 在 Java Web 应用程序中从应用程序服务器外部提供静态数据的最简单方法

javascript - 如何检查javascript是否被禁用?

cookies - 是否可以从不同的子域读取 cookie?如果是这样,如何?

java - 泛型类,了解泛型参数

java - IBM 工作灯 6.1 - "Ecma Error: TypeError: Cannot call property <function> in object"

java - 带有异步 Servlet 的 JAX-WS

ruby-on-rails - ActionDispatch::Cookies 未在响应中设置 Set-Cookie header ,但 response.set_cookie 确实如此

java - GWT 编译无法加载类

java - 如何使用查询从存储库读取实体的特定变量?