php - 为什么不为不同用户的设备设置相同的 cookie?

标签 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。


我的问题是什么:大多数专业程序员告诉我:

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/

相关文章:

PHP 重定向用户并继续处理脚本

php - 将相同的 ID 添加到 2 个不同的表中

Mysql匹配带括号边界的单词

javascript - 如何防止客户端用户更改 onClick 函数中的参数?

android - 从 Android 应用程序安全地连接到 Web 服务

php - 如何在 Yii2 中使用自定义 css 文件布局模块

php - 如何获取magento数据库详细信息

PHP 使用 ORDER BY 查询 MySQL 对数据库项目进行排序

mysql - SQL查询以制作列表等

PHP和mySQL登录安全疑虑