如何删除cookie

时间:2013-04-12 09:55:12

标签: java jquery servlets cookies logout

我正在尝试为我的iPhone应用程序实现注销功能,该应用程序使用jQuery mobile,客户端的JS和服务器端的java。目前我要做的是清除cookie并重定向到我的index.html中的#loginpage标签(我只有1个HTML文件,其中有不同页面的多个标签)。我现在对clearCookie所做的是:

Cookie readCookie = null;
for (Cookie cookie : httpRequest.getCookies()) {
    if (cookie.getName().equals("CookieForLogin")) {
        readCookie = cookie;
        break;
    }
}

readCookie.setMaxAge(0);
httpResponse.addCookie(readCookie);

但是这段代码并没有清除cookie。我尝试过JS方法,即将过期日期设置为某个上一个日期,在网上给出,但它们也不起作用。我也没有HttpServletResponse的响应方法。如何清除客户端设置的cookie&还有如何重定向到特定标签?

3 个答案:

答案 0 :(得分:4)

Cookie与特定路径绑定。您需要确保在cookie删除期间设置与cookie创建期间相同的路径。它默认为URL中当前请求的文件夹(因此只能在同一文件夹或其所有子文件夹中使用)。您最好明确指定路径,否则它将取决于URL中当前请求的文件夹。 cookie路径信息类似于请求cookie头中不可用的maxage。

假设您按如下方式创建了cookie,

Cookie cookie = new Cookie("CookieForLogin", cookieForLogin);
cookie.setPath("/somePath");
cookie.setMaxAge(maxAgeInSeconds);
// ...
response.addCookie(cookie);

需要按如下方式删除:

Cookie cookie = new Cookie("CookieForLogin", null);
cookie.setPath("/somePath");
cookie.setMaxAge(0);
// ...
response.addCookie(cookie);

/somePath只是示范性的。您也可以使用/,只要它在两种情况下都相同。

注意,这同样适用于cookie的SecureHTTP-only标志。如果您在Cookie创建期间最初将其设置为true,那么您还应该在删除Cookie时将其设置为true,它们默认为false

那就是说,我不确定将登录用户存储为cookie是多么有用。您基本上也允许最终用户操纵其值。而只是将登录用户存储为会话属性,并在注销时调用session.invalidate()

答案 1 :(得分:2)

  

void setMaxAge(int expiry)

我们可以使用setMaxAge()

方法删除Cookie
Cookie c = new Coookie("x", "10");

如果将maxage设置为0

c.setMaxAge(0); //it causes the cookie to be deleted.

如果将maxage设置为负值

c.setMaxAge(-1);
// cookie is not stored persistently and will be deleted end of the browsing session.

答案 2 :(得分:0)

getMaxAge

public int getMaxAge() 获取此Cookie的最大年龄(以秒为单位)。 默认情况下,返回-1,表示cookie将一直存在,直到浏览器关闭。

返回: 一个整数,以秒为单位指定cookie的最大年龄;如果为负,则表示cookie一直存在,直到浏览器关闭 也可以看看: setMaxAge(int)的

// Java API文档

简而言之,您需要设置cookie年龄:

A negative value means that the cookie is not stored persistently and will be deleted when the Web browser exits. 
A zero value causes the cookie to be deleted.

 Cookie killMyCookie = new Cookie("mycookie", null);
 killMyCookie.setMaxAge(0);
 killMyCookie.setPath("/");
 response.addCookie(killMyCookie);