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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值