网站的「记住登录」、网站的「记住密码」、浏览器的「记住密码」的差别
- 意思一样的词汇:“自动登录”、“记住我”、“记住登录状态”、“x天内免登录”...
1. 网站的「记住登录」
- 网站的「记住登录」功能是设置一个特殊的 cookie,也就是网站能够访问的、存储在你的浏览器数据库中的信息。通常,取得此 cookie(及相关的其它信息)则可以对网站进行访问。但是,这个 cookie 是有时效性的,比如很多网站的「记住登录」功能只会保持几天。通过此 cookie 无法取得用户的密码甚至是用户名等信息(如果网站方设计得当的话)。
- 通用的实现办法是:
将用户的用户名和加密之后的密码也通过Cookie的方式存放在客户端,当服务器上的Session销毁以后,使用Cookie里面存放的用户名和加密之后的密码(更好的做法是不存密码)重新执行一次登录操作,重建Session,并更新客户端上Cookie中存放的的Session ID,而这个操作是发生在用户请求一个需要身份验证的页面资源的背后,对于用户来讲是透明的,于是就达到了“记住我的登录状态”的目的了。
2. 网站的「记住密码」
- 比较精彩的讨论:https://www.v2ex.com/t/317163
比如:
- 最好别做记住密码,会被人打死的。保持登录就行了。
- 千万不要去做什么帮用户记住密码然后填充, 这个让用户自己用浏览器活着第三方工具(1password 等)实现
- 最好不要做,现在浏览器都带记住密码功能,这个安全的锅还是甩给用户好了
3. 浏览器的「记住密码」
- 浏览器chrome的「记住密码」是加密的,只是在密码管理里面明文显示而已。
其他资料
在cookie中,保存三个东西——用户名,登录序列,登录token。
用户名:明文存放。
登录序列:一个被MD5散列过的随机数,仅当强制用户输入口令时更新(如:用户修改了口令)。
登录token:一个被MD5散列过的随机数,仅一个登录session内有效,新的登录session会更新它。
登录token是单实例登录。意思就是一个用户只能有一个登录实例。
登录序列是用来做盗用行为检测的。如果用户的cookie被盗后,盗用者使用这个cookie访问网站时,我们的系统是以为是合法用户,然后更新“登录token”,而真正的用户回来访问时,系统发现只有“用户名”和“登录序列”相同,但是“登录token” 不对,这样的话,系统就知道,这个用户可能出现了被盗用的情况,于是,系统可以清除并更改登录序列 和 登录token,这样就可以令所有的cookie失效,并要求用户输入口令。并给警告用户系统安全。
权衡Cookie的过期时间。如果是永不过期,会有很不错的用户体验,但是这也会让用户很快就忘了登录密码。如果设置上过期期限,比如2周,一个月,那么可能会好一点,但是2周和一个月后,用户依然会忘了密码。尤其是用户在一些公共电脑上,如果保存了永久cookie的话,等于泄露了帐号。所以,对于cookie的过期时间我们还需要权衡。