Nee*_*asu 3 php concurrency session locking
会话必须同步.当A
写入/保存到session
B
或another A
放在等待.哪个是基于文件的会话处理必须的.
但是一旦A
加载了会话(但现在保存了它的修改)B
,也应该允许加载相同的会话.因为加载会打开文件并将文件内容带入内存并关闭.
是否有任何理由在整个A
加载会话期间阻止所有其他脚本并A
保存会话.不能只使用保存处理程序进行同步?
因此,两个PHP脚本永远不能同时工作如果它们共享同一个会话.
例如 seslock.php
<?php
header('Content-Type: text/plain');
session_start();
if(isset($_GET['wait'])){
sleep(30);
echo "waiting\n";
}else{
echo "No Waiting\n";
}
?>
done
Run Code Online (Sandbox Code Playgroud)
访问seslock.php
将立即响应,但seslock.php?wait
需要30秒才能回复.但问题是如果你seslock.php?wait
先请求而且只是seslock.php
第二次.该non-sleep
块将要求您等待30秒.
为什么它阻止不是我的问题.我在问为什么会阻止start to save
?而不是阻止only save
?
可能重复:
当一个脚本使用curl调用另一个脚本时,为什么session_start会导致超时
......还有很多;)
编辑
它阻塞的原因是因为正在读取会话文件,并且可能在第一个脚本运行时的任何时间点进行修改,因此锁定.