当同一个客户端同时多次请求同一个脚本时的 PHP session 处理

标签 php session mutex

这是我的测试设置:

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

我希望发生的是每次我点击该页面时,它都会返回一个不同的数字。

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

为什么会这样,我该如何解决?

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

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

echo microtime();
sleep(10);

运行这 3 次,每次间隔 2 秒,所有三个都返回相同的微秒。什么鬼?

最佳答案

默认情况下, session 数据在请求终止之前不会被保存。所以你的增量在 sleep 时不会被保存。如果你想过早地保存 session 结帐 session_write_close()

关于当同一个客户端同时多次请求同一个脚本时的 PHP session 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2359062/

相关文章:

asp.net - 使用进程外 session 状态的 ASP.NET 应用程序中的 SQL Server 连接问题

c++ - 什么可能导致线程 ID 为 -1?

c++ - 在以下情况下,当 cond 为真时,锁会发生什么情况?

c# - 记住单个页面上的状态时,使用隐藏字段总是比 session 更好吗?

java - 如何解决在 Hibernate4 中的 ServletContext 资源中创建名称为 'sessionFactory' 的 bean 时出错的问题

c++ - 使用屏障同步生产者/消费者

javascript - 如何使用 JavaScript 更改所有选择标签的所有选项

php - mySQL UPDATE table based on SELECT (count) of a different table

php - ubuntu 18.10.1安装wordpress后出错

php - 当点击一个链接到一个新的 .php 页面时,该链接不起作用