为了账号安全,请及时绑定邮箱和手机立即绑定

Java 关于Cookie的蛋疼问题

Java 关于Cookie的蛋疼问题

翻阅古今 2019-03-22 19:15:58
最近让做一个自动登录的功能,于是google,学习了下他人的代码,感觉不是很难;但还是遇到了一些小挫折,很叫人蛋疼!也没法搞定了,只能发帖呼救了~我所实现的自动登录功能也就三步:①在登录方法的判断密码的if分支中,创建cookie如下:  Cookie cookie = new Cookie("usr", username); cookie.setMaxAge(24*60*60*15); response.addCookie(cookie); Cookie cookie = new Cookie("pw", pwEncrypt); cookie.setMaxAge(24*60*60*15); response.addCookie(cookie); ②在访问首页的方法中,搜索cookie如下:  String username = ""; String password = ""; Cookie[] cookies = request.getCookies(); if (cookies != null) {     for (Cookie cookie : cookies) {         if ("usr".equals(cookie.getName())) {             username = cookie.getValue();         }         if ("pw".equals(cookie.getName())) {             password = cookie.getValue();         }         if (!"".equals(username) && !"".equals(password)) {             //将用户对象放入session中         }     } } ③退出方法中,删除cookie如下:  Cookie[] cookies = request.getCookies(); if (cookies != null) {     for (Cookie cookie : cookies) {         if ("urs".equals(cookie.getName())) {             cookie.setValue("");             cookie.setMaxAge(0);             response.addCookie(cookie);         }         if ("pw".equals(cookie.getName())) {             cookie.setValue("");             cookie.setMaxAge(0);             response.addCookie(cookie);         }     } } 其中,①②步都木问题,问题就出在第③步,无论怎样都无法删除cookie(最后也只能在ie的Internet选项中删了)。点击“退出”按钮时,关闭浏览器,再打开,首页依然显示该用户为登录状态,很是纠结!!是代码问题,还是我浏览器设置问题?或者是其他什么原因?
查看完整描述

6 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

一、删除已知名称的Cookie(方案:重新建立同名立即删除类型的Cookie)

Cookie newCookie=new Cookie(“username”,null); //假如要删除名称为username的Cookie

newCookie.setMaxAge(0); //立即删除型

newCookie.setPath(“/”); //项目所有目录均有效,这句很关键,否则不敢保证删除

response.addCookie(newCookie); //重新写入,将覆盖之前的

  二、删除所有Cookie

Cookie[] cookies=request.getCookies();

for(Cookie cookie: cookies){

cookie.setMaxAge(0);

cookie.setPath(“/”);

response.addCookie(cookie);

}


查看完整回答
反对 回复 2019-04-26
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

1、你删cookie的方式没问题
2、你是不是应该调用session.invalidate 销毁session,因为
String username = "";
String password = "";
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if ("usr".equals(cookie.getName())) {
username = cookie.getValue();
}
if ("pw".equals(cookie.getName())) {
password = cookie.getValue();
}
if (!"".equals(username) && !"".equals(password)) {
//将用户对象放入session中
}
}
}

你这段代码是查用户放到session 怀疑你又根据session中的数据判断用户是否登录


查看完整回答
反对 回复 2019-04-26
?
郎朗坤

TA贡献1921条经验 获得超9个赞

删除cookie的程序是没有问题的,估计是你每次登陆的时候并不是检测cookie中是否存在改用户,可能是检测session了,你可以每次退出登陆是将session销毁试试


查看完整回答
反对 回复 2019-04-26
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

 for (Cookie cookie : cookies) {

if ("urs".equals(cookie.getName())) {

//cookie.setValue(""); // 注释掉 
cookie.setMaxAge(0);

response.addCookie(cookie);

}

if ("pw".equals(cookie.getName())) {

//cookie.setValue(""); // 注释掉        cookie.setMaxAge(0);   
        response.addCookie(cookie);   
    }   
}


查看完整回答
反对 回复 2019-04-26
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

点击“退出”按钮时,关闭浏览器,再打开,首页依然显示该用户为登录状

要确认一下客户端是否接收到了删除cookie的命令,用firebug看看点击退出时,浏览器接收到的response中有没有set cookie指令


查看完整回答
反对 回复 2019-04-26
  • 6 回答
  • 0 关注
  • 564 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信