什么';这是一种安全的方法来创建;“记住我”;在PHP中使用cookies的系统?

什么';这是一种安全的方法来创建;“记住我”;在PHP中使用cookies的系统?,php,mysql,cookies,Php,Mysql,Cookies,我正处于一个项目的开始阶段,当用户进行身份验证时,该项目将有一个“记住我”选项 “我的用户”的数据库表具有以下身份验证基本结构: id:用户注册时生成的随机数。(关键) 用户名:用户选择的用户名,可以更改为另一个唯一的用户名 哈希:设置密码时使用“phpass”创建的密码的哈希 我想知道一种安全的方法,使用cookies和MySQL让用户登录,即使是在多台计算机上 我希望我可以使用相同的cookies来存储临时会话或“记住我”部分。我读过关于令牌和将所有用户信息散列到cookie中的内容,但

我正处于一个项目的开始阶段,当用户进行身份验证时,该项目将有一个“记住我”选项

“我的用户”的数据库表具有以下身份验证基本结构:

  • id:用户注册时生成的随机数。(关键)
  • 用户名:用户选择的用户名,可以更改为另一个唯一的用户名
  • 哈希:设置密码时使用“phpass”创建的密码的哈希
我想知道一种安全的方法,使用cookies和MySQL让用户登录,即使是在多台计算机上

我希望我可以使用相同的cookies来存储临时会话或“记住我”部分。我读过关于令牌和将所有用户信息散列到cookie中的内容,但它安全吗?我检查了Facebook的cookies,这些cookies是在用户身份验证后使用的,并且有用户id条目,我真的有必要这么做吗

如果我决定将信息散列到cookie中,我应该使用可能较慢的“phpass”还是一个简单的MD5函数,看看每个页面和每个AJAX请求中都会有身份验证?我应该在每次验证登录时续订用户令牌吗


最后,我最好的选择是什么?我知道有很多类似的问题,但我没有找到像“最好的方法”这样的问题。在每一篇文章中,我都发现这个主题有一些不同和矛盾的地方。我想知道一种安全、干净的方法。

我建议使用一个单独的表来存储保存的登录会话。此表将存储用户选择“记住我”时生成的唯一哈希、用户的IP地址及其用户id

当或如果用户决定保持持久登录时,您将生成哈希,将该哈希保存为cookie值,并将其IP/用户id存储在“记忆”表中

在会话启动/检查序列中,首先检查会话是否已设置——如果未设置,则检查是否已设置cookie——如果已设置cookie,则将其IP地址与数据库中cookie的哈希值相匹配,然后如果所有会话都已签出,则将其会话状态设置为“已验证”

使用IP地址和唯一哈希表的原因是允许多个设备/计算机持久化。每个设备在您的会话表中都有一个条目


此方法不会在cookie中存储任何密码,只有成功输入密码的人才能在其计算机上使用此cookie。此外,即使有人在他们的cookie中抓取了该用户的哈希值,他们也需要在同一网络上才能被认为是经过身份验证的。

我还建议在cookie中存储用户id。具有动态IPS的连接存在一个问题。如果您追求的是安全性,这是一个很小的代价。