今天代码中清除cookie,却发现没有能清掉,而且还出了奇怪的问题。
先看清除cookie的代码:
if(cookies[i].getName().equals("userId") || cookies[i].getName().equals("userNickname") || cookies[i].getName().equals("userLevel")){
Cookie cookie = new Cookie(cookies[i].getName(), null);
cookie.setMaxAge(-1);
response.addCookie(cookie);
}
这样,原理的cookie是没有清掉的,而且,获取到的value为“”,而不是null!
截图为证:
这有时候会造成很大的问题。
经查证,知道cookie.setMaxAge(-1);是在关掉浏览器的时候才清除。立即清除需要cookie.setMaxAge(0);
代码改为:
if(cookies[i].getName().equals("userId") || cookies[i].getName().equals("userNickname") || cookies[i].getName().equals("userLevel")){
Cookie cookie = new Cookie(cookies[i].getName(), null);
cookie.setMaxAge(0);
response.addCookie(cookie);
}
好了,结果cookie真的被清除了,是完全清除了!
最后,猜想一下为什么Cookie cookie = new Cookie(cookies[i].getName(), null);读取cookie的时候是“”而不是null。cookie是以字符串的形式存储的,当设为null时,存储的时候不可能以null存储,把它的值设为空也就情理之中了,可能就是因为这个原因吧。不过个人认为如果在存储为null的时候,读取的时候能自动转换为null而不是“”,就更好了。