这是我的表结构:
// users
+----+--------+------------------------+------------------+-------------------------------+
| id | name | email | cookie | /* some other columns */ |
+----+--------+------------------------+------------------+-------------------------------|
| 1 | Jack | jack0948@gmail.com | ojer0f934mf2... | |
| 2 | Peter | P_2009@ymail.com | ko4398f43043... | |
| 3 | John | mx_pro34@gmail.com | 0243hfd348i4... | |
+----+--------+------------------------+------------------+-------------------------------+
cookie
列包含一个字符串(作为让用户保持登录状态的 cookie),它也被设置到用户的设备中。如您所见,对于每个用户,我只有一个字符串(作为cookie)。所以所有用户的设备都有一个相同的 cookie。
我的问题是什么:大多数专业程序员告诉我:
It would be safer if each device had its own cookie (the cookie of each device should be different than the cookie of other devices, not a constant cookie for all devices)
为什么?对所有设备使用相同的 cookie 有什么问题?同样如您所见,我在数据库中只有一条 cookie 记录。因此,如果我为新设备更新该记录,那么之前的设备将被注销。
最佳答案
我想您所说的 cookie 是指 session ID。 Cookie 实际上可以代表任何东西。
你永远不应该在数据库中存储 session ID。 session ID 是临时值,应在每个新 session 中更改。通过存储它们,您会遇到几个问题:
- session 窃取:如果有人发现他不拥有的 session ID,它将始终有效。这是错误的。
- 碰撞:我想您使用某种散列方法生成这些值。在这种情况下,您可能会在具有相同 session ID 的帐户之间发生冲突。
- 可能还有一些其他问题...
通过在每个新 session 上生成一个 session ID,您可以避免这些问题。但这意味着您的设备对于同一用户可能没有相同的 session ID。
您在这里实际做的是存储 session ID,不是 session ID。这是一个密码,以纯文本形式存储。这是非常错误的。
关于php - 为什么不为不同用户的设备设置相同的 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38056396/