最近让做一个自动登录的功能,于是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选项中删了)。点击“退出”按钮时,关闭浏览器,再打开,首页依然显示该用户为登录状态,很是纠结!!是代码问题,还是我浏览器设置问题?或者是其他什么原因?
[quote]一、删除已知名称的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);
}
[/quote]
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中的数据判断用户是否登录
删除cookie的程序是没有问题的,估计是你每次登陆的时候并不是检测cookie中是否存在改用户,可能是检测session了,你可以每次退出登陆是将session销毁试试
[code="java"] 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);
}
} [/code]
[quote]
点击“退出”按钮时,关闭浏览器,再打开,首页依然显示该用户为登录状
[/quote]
要确认一下客户端是否接收到了删除cookie的命令,用firebug看看点击退出时,浏览器接收到的response中有没有set cookie指令
第一:注销时要session.invalidate()。
第二:不应该在进入首页时检查,而应该在进入任何页面(登录页除外)都检查。
第三:有可能是IE的缓存问题,你在页面源代码中加入禁用缓存的代码试试。