RememberMe简介
RememberMe 这个功能非常常见,图6-1 所示就是 QQ 邮箱登录时的 “记住我” 选项。
提到 RememberMe,一些初学者往往会有一些误解,认为 RememberMe 功能就是把用户名密码用 Cookie 保存在浏览器中,下次登录时不用再次输入用户名/密码。这理解显然是不对的。
我们这里所说的 RememberMe 是一种服务器端的行为。传统的登录方式基于 Session 会话,一旦用户关闭浏览器重新打开,就要再次登录,这样太过于烦琐。如果能有一种机制,让用户关闭并重新打开浏览器之后,还能继续保持认证状态,就会方使很多,RememberMe 就是为了解决这一需求而生的。

Figure 1. 图6-1QQ邮箱登录时的记住我选项
具体的实现思路就是通过 Cookie 来记录当前用户身份。当用户登录成功之后,会通过一定的算法,将用户信息、时间戳等进行加密,加密完成后,通过响应头带回前端存诸在 Cookie 中,当浏览器关闭之后重新打开,如果再次访问该网站,会自动将 Cookie 中的信息发送给服务器,服务器对 Cookie 中的信息进行校验分析,进而确定出用户的身份,Cookie 中所保存的用户信息也是有时效的,例如三天、一周等。
敏锐的读者可能已经发现这种方式是存在安全隐患的。所谓鱼与熊掌不可兼得,要想使用便利,就要牺牲一定的安全性,不过在本章中,我们将会介绍通过持久化令牌以及二次校验来降低使用 RememberMe 所带来的安全风险。