看看以下公认无用的代码:
<?php
session_start();
$_SESSION["key-".rand(1,1000)] = time();
print_r($_SESSION);
die();
如果您要从本地计算机运行它,它会打印出如下内容:
Array
(
[key-272] => 1341011374
)
如果您将代码保持原样,然后刷新浏览器,您会看到与此非常相似的内容:
Array
(
[key-272] => 1341011374
[key-954] => 1341011374
[key-895] => 1341011379
)
再次刷新:
Array
(
[key-272] => 1341011374
[key-954] => 1341011374
[key-895] => 1341011379
[key-337] => 1341011379
[key-15] => 1341011869
)
依此类推,每次将两条记录添加到 $_SESSION 数组(不仅仅是我期望的一条)。另外,请注意在每对添加的记录中,第一个值与前一个添加的记录相同,但键是不同生成的随机数。
谁能解释这里发生了什么?
更新 1
正如我在评论中向其他人提到的,请注意第一个请求只设置一个$_SESSION 值,然后每次设置 2。
从第二个请求开始,当它为每个请求设置 2 个值时,时间戳不一样。如果请求发生了两次,您希望它们相同或接近,但每对中的第一个始终与前一个请求的时间戳相同,即使您在两者之间等待了很长时间。奇怪。
更新 2
我刚刚检查了 Firefox 和 Safari,起初得到了一些奇怪的结果,然后一切似乎都按预期工作,每个请求只添加了一条记录。我已经删除了所有代码,只留下了您在此处看到的代码,在一个普通的 index.php 文件中,其中没有其他代码。然而,在 Chrome 中,它的行为方式与我上面描述的完全相同。
似乎是一个以 Chrome 为中心或至少与 Chrome 相关的问题,但我仍然不知道为什么?除非您的每个脚本都是幂等的,否则让它们运行两次似乎是一个非常可怕的错误......