我正在尝试提供源自同一浏览器会话的两个几乎同时发出的请求。
考虑以下最小例子:
<?php
session_start();
$sessionId = session_id();
session_write_close();
$file = sys_get_temp_dir() . '/lock_test';
if (!file_exists($file)) {
touch($file);
sleep(5);
unlink($file);
echo 'done! ' . $sessionId;
} else {
echo 'locked! ' . $sessionId;
}
第二个请求应该导致&#34;锁定&#34;输出,但它总是等待第一个请求完成,然后输出&#34;完成&#34;。
Xdebug没有运行。 PHP版本是5.5。
编辑:
投票将其作为副本关闭。链接的问题表明,为了解决这个问题,请附加一个随机变量。所以我建议附加一个requestTime变量并将其设置为一个微秒的时间戳。
答案 0 :(得分:0)
这种行为没问题。如果两个请求共享同一个会话并且您正在使用文件来存储会话数据,则PHP需要flock()
会话文件以防止它被尝试写入文件的多个同意请求损坏。 (当然PHP总是flock()
会话文件,但是有多个同意请求共享同一个会话,你可以看到它有效)