前提

1。饼干易碎。曲奇容易被倒塌的车站脚本偷走和攻击,我们必须接受cookie是不安全的。
2。持久登录cookie使他们能够通过网站验证。这与使用用户名和密码是一样的。
三.从登录cookie恢复密码的设计比不恢复密码更危险。
4。持久cookie和IP的绑定使它们大部分时间不能持久。
5。用户可能希望同时保持cookie持久性多个浏览器和多台机器。

计划

首先,Cookie包含一个用户名,分隔符,和一个大的随机数(128位是理想的和可接受的长度),有一个拥有随机数和用户名验证cookie是合法的服务器之间的关系表,用户登录的话可以用饼干提供的随机数和用户名对应存储在表的表和表结构不过期的接受:

复制代码代码如下所示:
expire_time ID用户名令牌
1福598433213 ..... 8766688 2012-09-21 00:00:00
2条435435997 ..... 4354564 2012-09-22 11:00:00


在某些时候,用户可能对应多个随机数。另外,虽然这是不可能的,即使两用户名不相同的随机数。

在持久性Cookie认证,随机数用于登录无效,需要分配一个新的cookie(生成一个新的随机数和更新数据库中的记录)给用户,然后使用标准的会话管理机制来处理会话的生命周期,以及新的cookie不会被检查,直到会议结束。

服务器不需要故意阻止以前使用的随机数被重用。这个概率很小。即使它发生了,也没有人会知道它能利用它。

当用户退出退出功能,在当前cookie的随机数也是无效的。用户还可以选择清除所有持续登录的系统记录。

数据库不定期净化那些逾期记录(类似于会话的GC机制)。

下列功能不允许由曲奇登录的用户使用:
复制代码代码如下所示:
*修改密码
*修改用户邮箱(尤其是如果系统的密码检索机制基于邮箱)
*任何用户的敏感信息
*任何需要支付的功能

最后

如果用户的登录cookie受到攻击,攻击者可以使用用户的身份来使用站点的功能,这是cookie不可避免的用法!尽管如此,攻击者不应该这样做:
复制代码代码如下所示:
*接触用户敏感信息
*花用户的钱
*重新设置用户密码
*防止用户以用户的名义接收通知
*把偷来的饼干分享给别人