日期:2014-05-17  浏览次数:20724 次

如何解决异地修改密码后,原地Cookie使其失效!
如题:

我在A电脑上登陆并保存coockie,且web应用是保存sessionId来辨认登陆者的。

Session中我直接保存了 DAO层通过账号密码登陆 返回的User Bean对象(User 中有name,password,realName等属性)

然后我第二天在B电脑登陆了(异地),然后我还修改了我这个密码。那么出于安全机制,我就应该把A电脑上的cookie远程清除,或者是让这个cookie里保存的sessionId登入进来时无效。

否则A电脑上还能登陆,而且登陆进来的User Bean还是旧的(密码是没改过的!)。且不说不安全,至少A电脑登陆的时候信息都不是最新的!

所以,如何才能解决这个问题。远程清除coockie?还是其他办法?

------解决方案--------------------
你混淆了:sessionId的作用了;
sessionId用于标示一次会话中的seesion对象;或者说用sessionId判断用户是否登录,如果登陆了,是哪个用户;
 你要实现cookie自动登录,需要将用户名,密码(加密过后的)存到cookie中;而不是使用sessionId;
 
如果像你说的那样操作,A计算机因为密码错误无法登陆
------解决方案--------------------
引用:
Quote: 引用:

2楼说的对的。为什么在cookie中存sessionid?sessionid是一次回话的id,理论上来说,如果此次回话结束,你使用老的sessionid是无法登陆的。

cookie中存入用户名和密码吧


就是再不存用户名和密码的情况下,才有这样的问题。主要是存用户名和密码在coockie中不安全。

会话结束,我没通知服务器调用session.invalid()方法,那么下次我登陆时使用老的sessionId是可以登录的。

目前我的系统是用户使用了注销操作,认为他们是下次不想免登陆。我才清除session。
一般的用户直接关闭浏览器,不注销。我就默认为他们下次还想免登录,我就不做操作,下次登录使用上次的sessionid还是能登录的(只要该session在服务器里没过期)。

可以参考:http://blog.csdn.net/syaguang2006/article/details/11821271


你远程修改了密码,如果你的cookie保存的是sessionid,而后台的逻辑只检查sessionid而不检查密码,那就没法验证了。

远程修改cookie是无法实现的。所以你要么就在一次回话结束把session 干掉,要么就保存密码