在servlet中删除cookie的问题

Ste*_*son 6 java cookies servlets http

我尝试使用此代码删除servlet中的cookie

Cookie minIdCookie = null;

for (Cookie c : req.getCookies()) {
    if (c.getName().equals("iPlanetDirectoryPro")) {
        minIdCookie = c;
        break;
    }
}

if (minIdCookie != null) {
    minIdCookie.setMaxAge(0);
    minIdCookie.setValue("");
    minIdCookie.setPath("/");
    res.addCookie(minIdCookie);
}

res.flushBuffer();
Run Code Online (Sandbox Code Playgroud)

但是这没有效果,也没有改变cookie属性.

我也尝试在这个servlet中添加一个cookie,这很好用.

为什么我无法更改现有cookie的属性.

Bal*_*usC 7

你不应该改变路径.这会改变cookie身份.如果cookie被设置为类似的路径/foo并且您将其更改为/,则客户端将不再将更改的cookie与原始cookie相关联.Cookie由名称和路径标识.

将maxage设置为0应该足够了.

Cookie[] cookies = request.getCookies();
if (cookies != null) { // Yes, this can return null! The for loop would otherwise throw NPE.
    for (Cookie cookie : cookies) {
        if (cookie.getName().equals("iPlanetDirectoryPro")) {
            cookie.setMaxAge(0);
            response.addCookie(cookie);
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您还需要确保在后续请求中读取/测试cookie ,而不是在当前请求中.


Ste*_*son 0

问题是我想要删除的 cookie 的路径是“/admin”,而我的注销 servlet 的路径是“/admin/logoutServlet”。当我从请求中获取 cookie 时,路径设置为 null。因此,当我添加 cookie 时,路径将设置为“/admin/”作为我的 servlet。如果我使用路径“/admin/”创建了一个 cookie,servlet 就能够将其删除。

我通过在将 cookie 添加到响应之前明确设置 cookie 的路径来解决这个问题。

minIdCookie.setMaxAge(0);
minIdCookie.setPath("/");
res.addCookie(minIdCookie);
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么路径为空。