您的位置:首页 > 其它

用户登录 和 “记住密码”功能

2012-12-04 22:24 495 查看
我记得很早以前上校内那会儿,在自己的笔记本上勾选了“记住密码”的功能,这样每次就可以直接进入主页。但是如果有哪次在其他电脑上登录了自己的校内之后,再用自己的笔记本上就要重新输入密码。

看了这篇文章后,对这种情况就有了了解 http://coolshell.cn/articles/5353.html

其中有一部分就是讲述了实现“记住密码”这一功能的设计。常见的设计就是:一旦用户勾选了“记住密码”这一选项,那么服务器就会生成一个cookie,其中保存了三样东西:
1. 用户名:明文存放
2. 登录序列:一个被MD5散列过的随机数。仅当强制用户输入口令时更新。(我的理解是,这个登录序列就代替了密码的功能,因为密码是不能存放在cookie中的。这样每次登录的时候浏览器会自动将cookie中的用户名和登录序列发送给服务器,验证是否与服务器中的cookie内容相同)
3. 登录token:一个被MD5散列过的随机数。仅在一个登录session内有效,新的登录session会更新它

当用户勾选了“记住密码”功能后,之后的每次在相同电脑上输入域名后,浏览器会找到相应的cookie文件,将其中的内容发送给服务器端。服务器检查用户名和登录序列是否匹配,还有检查登录token和上一次的登录token是否相同,如果相同,则认为是同一用户,返回相应的页面,并更新token,保存在服务器端和客户端,以待下次继续验证。
如果客户端发送来的token和服务器端保存的token不同。比如,考虑这种情况。用户的cookie被盗用,盗用者使用这个cookie文件来登录用户的主页,服务器端通过验证认为是合法用户,并在这次session结束时更新token。那么在用户在自己的电脑上试图登录的时候,服务器会检测到发送的token与服务器端保存的也就是上次会话的不同,此时系统就认为可能发生了被盗用的情况,就会清空登录序列和token,删除cookie,并强制用户输入密码。

但是这种设计也有很大的缺点,比如同一用户在自己的不同设备上的登录。举个例子,我在实验室的时候上校内和在宿舍上校内,我都希望能够自动登录,但是按照上面所说的设计是无法实现的。因此在设计的时候需要使用某些逻辑或者算法来判断是否可能出现被盗用情况,上面所说的设计有点草木皆兵的味道。。。
一种改进方法是考虑IP地址。比如如果两个设备的IP相同,或者是在同一局域网内(比如某大学的内部校园网),则认为这是用户可控的情况。

转自:http://blog.sina.com.cn/s/blog_6ccd0a1101011vxo.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐