Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么不为不同的用户提供相同的cookie';s设备?_Php_Mysql_Security_Cookies - Fatal编程技术网

Php 为什么不为不同的用户提供相同的cookie';s设备?

Php 为什么不为不同的用户提供相同的cookie';s设备?,php,mysql,security,cookies,Php,Mysql,Security,Cookies,以下是我的表格结构: // users +----+--------+------------------------+------------------+-------------------------------+ | id | name | email | cookie | /* some other columns */ | +----+--------+------------------------+------

以下是我的表格结构:

// 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,而是密码,以明文形式存储。这是非常错误的,我想cookie是指会话id,实际上cookie可以代表任何东西

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

  • 会话窃取:如果有人发现他不拥有的会话id,它将始终有效。这是错误的
  • 冲突:我想象您使用某种哈希方法生成这些值。在这种情况下,具有相同会话id的帐户之间可能会发生冲突
    • 可能还有其他问题
通过在每个新会话上生成会话id,可以避免这些问题。但这意味着您的设备对于同一用户可能没有相同的会话id


通过存储会话id,您在这里实际执行的操作不是会话id,而是密码,以明文形式存储。这是非常错误的

如何防止会话劫持?@CD001什么?我认为会话与所有设备使用相同的cookie无关。假设杰克使用开放式WiFi,我“窃听”并将他的cookie复制到我的手机上,然后访问你的网站,它怎么知道我不是杰克?@CD001
:-)
很公平。。!然而,你所说的发生的可能性很低。即使如此——这几乎就是会话劫持的定义;登录应仅在会话期间绑定到具有某种指纹/令牌系统的单个设备-使用同时设置了
secure
httpOnly
标志的cookie。这可能就是为什么大多数专业人士告诉你“如果每个设备都有自己的cookie,那么会更安全”你如何防止会话劫持?@CD001什么?我认为会话与所有设备使用相同的cookie无关。假设杰克使用开放式WiFi,我“窃听”并将他的cookie复制到我的手机上,然后访问你的网站,它怎么知道我不是杰克?@CD001
:-)
很公平。。!然而,你所说的发生的可能性很低。即使如此——这几乎就是会话劫持的定义;登录应仅在会话期间绑定到具有某种指纹/令牌系统的单个设备-使用同时设置了
secure
httpOnly
标志的cookie。这可能就是为什么大多数专业人士告诉你“如果每个设备都有自己的cookie,那么会更安全”