java清除cookie的值可能遇到的问题

来源:互联网 发布:datagridview筛选数据 编辑:程序博客网 时间:2024/05/29 10:00

今天代码中清除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而不是“”,就更好了。