您的位置:首页 > 其它

关于Web应用登录状态的那些事

2014-06-16 14:31 239 查看
以前做Web应用的时候从来没有仔细研究过登录以及会话的状态等,今天就碰到了问题,一个是如何在浏览器不关闭的情况下保存用户的登录状态,关闭后登录即失效。

首先考虑的是使用session,当然这个肯定是毋庸置疑的了,但是问题出现了:

1、我调用HttpSession中的isNew()方法发现有些浏览器可以得到正确的值,就是首次打开浏览器并请求我的应用返回true,但有的浏览器返回false,真心纠结,最后没办法只能采用在session中保存其他值的方式解决该问题,例如:session.setAttribute(WebConst.USER_NAME,user.getUserName()); 然后通过判断该session中的值是否存在来解决问题,null表示打开浏览器第一次访问

2、保存用户对象,我首先采用的是使用缓存,不过后来发现使用缓存不够严谨而且容易出问题,后来想到了线程安全的ThreadLocal,然后在每次请求的拦截器中将用户set到该对象中,要使用的时候在get出来,问题解决。

后来想到记住用户登录状态,有一周、一个月、一年,这个的实现就比较好弄了,使用Cookie解决问题,首先将用户的登录名密码都放在Cookie中(response.addCookie(cookie))需要注意的是Cookie的Path一定要设定准确,时间单位是秒,到期时间大于0的数为过期需要多少秒,等于0表示删除该Cookie,小于0表示时间无限大,一般使用-1。然后获取界面是的复选框是否选中,选中在Cookie中保存1或者其他标记值,然后在请求的拦截器中获取该值,若是保存登录状态的值(我们这里应该是1)就从Cookie中获取用户的登录名和密码然后自动登录。

到此实现了记住登陆功能,其中需要注意的是密码最好加密,增加安全性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: