如何在网站上最好的实现“记住我”功能?
如何在网站上最好的实现“记住我”功能?
关闭。这个问题需要更加聚焦。它目前不接受回答。
想要改善这个问题吗? 更新问题,聚焦于一个问题,通过编辑这篇文章。
改善这个问题
我想在我的网站上添加一个复选框,让用户可以单击它,以便他们在每次访问我的网站时无需登录。我知道我需要在他们的计算机上存储一个cookie来实现这一点,但该cookie应包含什么内容?
此外,有没有常见的错误需要注意,以防止这个cookie出现安全漏洞,同时仍然具有“记住我”的功能?
admin 更改状态以发布 2023年5月24日
持久化登录Cookie最佳实践
你可以使用这个2006年描述这里的最佳实践或这里描述的更新策略(2015年):
- 当用户成功登陆时选中了“记住我”,登录Cookie(除了标准的会话管理Cookie)就会被创建。
- 登录Cookie包含一系列标识符和令牌。这些标识符和令牌是从足够大的空间中随机生成的无法猜测的随机数。它们会一起被存储到一个数据库表中,令牌会被哈希(sha256是可以接受的)。
- 当非登录用户访问该站点并提供登录Cookie时,数据库会查找系列标识符:
- 如果系列标识符存在,并且令牌的哈希值与该系列标识符的哈希值匹配,则用户被视为已经通过验证。一个新的令牌将被生成,新的令牌的哈希值将覆盖旧记录,然后将发给用户一个新的登录Cookie(重新使用系列标识符是可以接受的)。
- 如果系列标识符存在但令牌不匹配,则认为有盗窃行为。用户会接收到警告,并删除所有该用户记住的会话。
- 如果用户名和系列不存在,则登录Cookie会被忽略。
这种方法提供了深层防御。即使有人成功泄露数据库表,也不会给攻击者冒充用户留下一个开放的大门。