什么';这是一种安全的方法来创建;“记住我”;在PHP中使用cookies的系统?
我正处于一个项目的开始阶段,当用户进行身份验证时,该项目将有一个“记住我”选项 “我的用户”的数据库表具有以下身份验证基本结构:什么';这是一种安全的方法来创建;“记住我”;在PHP中使用cookies的系统?,php,mysql,cookies,Php,Mysql,Cookies,我正处于一个项目的开始阶段,当用户进行身份验证时,该项目将有一个“记住我”选项 “我的用户”的数据库表具有以下身份验证基本结构: id:用户注册时生成的随机数。(关键) 用户名:用户选择的用户名,可以更改为另一个唯一的用户名 哈希:设置密码时使用“phpass”创建的密码的哈希 我想知道一种安全的方法,使用cookies和MySQL让用户登录,即使是在多台计算机上 我希望我可以使用相同的cookies来存储临时会话或“记住我”部分。我读过关于令牌和将所有用户信息散列到cookie中的内容,但
- id:用户注册时生成的随机数。(关键)
- 用户名:用户选择的用户名,可以更改为另一个唯一的用户名
- 哈希:设置密码时使用“phpass”创建的密码的哈希
最后,我最好的选择是什么?我知道有很多类似的问题,但我没有找到像“最好的方法”这样的问题。在每一篇文章中,我都发现这个主题有一些不同和矛盾的地方。我想知道一种安全、干净的方法。我建议使用一个单独的表来存储保存的登录会话。此表将存储用户选择“记住我”时生成的唯一哈希、用户的IP地址及其用户id 当或如果用户决定保持持久登录时,您将生成哈希,将该哈希保存为cookie值,并将其IP/用户id存储在“记忆”表中 在会话启动/检查序列中,首先检查会话是否已设置——如果未设置,则检查是否已设置cookie——如果已设置cookie,则将其IP地址与数据库中cookie的哈希值相匹配,然后如果所有会话都已签出,则将其会话状态设置为“已验证” 使用IP地址和唯一哈希表的原因是允许多个设备/计算机持久化。每个设备在您的会话表中都有一个条目
此方法不会在cookie中存储任何密码,只有成功输入密码的人才能在其计算机上使用此cookie。此外,即使有人在他们的cookie中抓取了该用户的哈希值,他们也需要在同一网络上才能被认为是经过身份验证的。我还建议在cookie中存储用户id。具有动态IPS的连接存在一个问题。如果您追求的是安全性,这是一个很小的代价。