关于cookie无法删除的问题-java

  今天在做一个用户退出demo的时候,发现无论怎么写都无法将存储username和password的cookie删除。

HttpSession session = request.getSession();
        //从session中将user删除
        session.removeAttribute("user");
        
        //将存储在客户端的cookie删除掉
        Cookie cookie_username = new Cookie("username", "");
        cookie_username.setMaxAge(0);
        Cookie cookie_password = new Cookie("password", "");
        cookie_password.setMaxAge(0);
        response.addCookie(cookie_username);
        response.addCookie(cookie_password);
        
        response.sendRedirect(request.getContextPath()+"/login.jsp");

(删除cookie的代码)

在debug的时,我觉应该是自动登陆的filter中的问题,于是改写了filter中的代码,让filter做了判断,如果是跳转登录和注册页面,就不进行自动登录。然后调试,发现注册界面和登陆界面确实没有了用户登陆信息。但是只要点击其他链接,马上就会登陆上用户信息。

这说明cookie还是没有删除成功,然后我查看请求头,果然cookie还是没能删除。


然后,我进一步检查持久化cookie的代码,

Cookie cookie_username = new Cookie("username", username);
                Cookie cookie_password = new Cookie("password", password);
                cookie_username.setMaxAge(24 * 60 * 60);
                cookie_password.setMaxAge(24 * 60 * 60);
                cookie_username.setPath(request.getContextPath());
                cookie_password.setPath(request.getContextPath());
                response.addCookie(cookie_username);
                response.addCookie(cookie_password);

我发现我在持久化cookie时,为了图省事将cookie可见路径设置为了全局。

而我退出代码中虽然确实是清除cookie的代码,但cookie默认的作用范围是当前目录和当前目录的子目录,所以cookie并没有被真正覆盖。

加入这两行代码

cookie_username.setPath(request.getContextPath());

cookie_password.setPath(request.getContextPath());

问题解决。

结论 Cookie的作用范围:默认可以作用于当前目录及其子目录,但不能作用于当前目录的上一级目录。要删除cookie时,一定要先了解cookie是否设置了作用范围,根据作用范围来进行覆盖删除。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值