我正在尝试提供来自同一浏览器会话的两个几乎同时发出的请求.
请考虑以下最小示例:
<?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;
}
Run Code Online (Sandbox Code Playgroud)
第二个请求应该导致"锁定"输出,但它总是等待第一个请求完成,然后输出"完成".
Xdebug没有运行.PHP版本是5.5.
编辑:
投票以关闭这个作为重复.链接的问题表明,为了解决这个问题,请附加一个随机变量.所以我建议附加一个requestTime变量并将其设置为一个微秒的时间戳.
这种行为是可以的。如果两个请求共享同一个会话,并且您使用文件来存储会话数据,则 PHP 需要flock()会话文件来防止它被尝试写入文件的多个并发请求损坏。(当然PHP将始终是flock()会话文件,但是有多个共享同一会话的并发请求,您可以看到它的效果)
| 归档时间: |
|
| 查看次数: |
968 次 |
| 最近记录: |