下面是我的表格结构:
// 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。
我的问题是什么:大多数专业程序员告诉我:
如果每个设备都有自己的cookie会更安全(每个设备的cookie应该不同于其他设备的cookie,而不是所有设备的恒定cookie)
为什么?在所有设备上使用相同的cookie有什么问题?正如您所看到的,我在数据库中只有一条cookie记录。因此,如果我为新设备更新该记录,那么之前的设备将被注销。
我猜你说的cookie是指会话id。cookie实际上可以表示任何东西。
永远不要在数据库中存储会话id。会话id是临时值,应该在每个新会话中更改。通过存储它们,您暴露了几个问题:
- 会话窃取:如果有人发现了一个他不拥有的会话id,它将始终有效。这是错误的。
- 碰撞:我想象您使用某种哈希方法生成这些值。在这种情况下,具有相同会话id的两个帐户之间可能会发生冲突。
-
- 可能还有其他问题…
通过在每个新会话上生成会话id,可以避免这些问题。但这意味着您的设备可能不会对同一用户具有相同的会话id。
通过存储会话id,您在这里实际做的是而不是一个会话id。这是一个密码,以明文形式存储。是非常错误的