所以这是我的测试设置:
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秒,所有三次返回相同的微秒。 WTF?
答案 0 :(得分:6)
默认情况下,会话数据在请求终止之前不会保存。因此,在睡觉时不会保存您的增量。如果您想过早保存会话,请结帐session_write_close()
答案 1 :(得分:0)
我希望脚本本身可以将某些内容添加到日志文件中,以验证脚本实际上是按照您的想法多次执行。也许你有一些软件在某个地方拦截请求并返回一个缓存的响应。
如果你的评论不适用于microtime(),我会解释php如何管理会话的可靠性,以及何时可能不会。
答案 2 :(得分:0)
显然这是我浏览器本身的一些错误。 Opera的行为方式与Internet Explorer不同。 我在IE中进行了初始测试,结果相同但代码更复杂。显然,复杂的代码有一个错误触发了IE中的错误行为,而这个简化的代码却没有。 抱歉打扰所有人。