为什么不为不同用户的设备使用相同的Cookie?

时间:2016-06-27 14:21:42

标签: php mysql security cookies

这是我的表结构:

// 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记录。因此,如果我更新新设备的记录,那么之前的设备将被注销。

1 个答案:

答案 0 :(得分:0)

我想通过cookie,你的意思是会话ID。 Cookie可以实际代表任何内容。

您永远不应该在数据库中存储会话ID。会话ID是临时值,应在每个新会话中更改。通过存储它们,您会遇到几个问题:

  • 会话窃取:如果有人发现他不拥有的会话ID,总是有效。这是错误的。
  • collisions:我想你会使用某种哈希方法生成这些值。在这种情况下,您可以在具有相同会话ID的帐户之间发生冲突。
    • 可能是其他一些问题...

通过在每个新会话上生成会话ID,可以避免这些问题。但这意味着您的设备可能没有相同用户的相同会话ID。

通过存储会话ID,您实际在这里做的是会话ID。它是一个密码,以纯文本格式存储。这非常错误