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的属性.
你不应该改变路径.这会改变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 ,而不是在当前请求中.
问题是我想要删除的 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)
但我不明白为什么路径为空。
| 归档时间: |
|
| 查看次数: |
12359 次 |
| 最近记录: |