当同一客户端一次多次请求同一脚本时,PHP会话处理

Vex*_*nda 3 php session mutex

所以这是我的测试设置:

session_start();
if(!isset($_SESSION['bahhhh']))
    $_SESSION['bahhhh'] = 0;
$_SESSION['bahhhh']++;
sleep(5);
die('a'.$_SESSION['bahhhh']);
Run Code Online (Sandbox Code Playgroud)

我期望发生的是每次我点击页面时,它返回一个不同的数字.

但是如果我使用多个标签,并在第一个标签的5秒内刷新它们,它们都返回相同的数字.(这不是客户端缓存,因为5秒的延迟仍然很明显.)

为什么这样做,我该如何解决这个问题?

它似乎与文件和数据库数据有着同样奇怪的缓存问题,并且阻止我构建一个工作的互斥锁以防止一次多次运行相同的代码.

这是另一个更简单的例子:

echo microtime();
sleep(10);
Run Code Online (Sandbox Code Playgroud)

运行3次,每次间隔2秒,所有三次返回相同的微秒.WTF?

Mik*_*e B 6

默认情况下,会话数据在请求终止之前不会保存.因此,在睡觉时不会保存您的增量.如果您想提前结帐保存会话session_write_close()