会话锁定
我们都知道 PHP 将会话数据写入服务器端的文件中。当请求通过 session_start()
启动会话的 php 脚本时,PHP 会锁定此会话文件,导致阻止/等待其他传入请求相同的 session_id
完成,因此其他请求将被卡在 session_start()
上,直到或除非会话文件已锁定未释放
会话文件保持锁定状态,直到脚本完成或手动关闭会话。为了避免这种情况,即为了防止多个请求被阻止,我们可以启动会话并关闭会话,该会话将从会话文件释放锁定并允许继续其余请求。
// php < 7.0
// start session
session_start();
// write data to session
$_SESSION['id'] = 123; // session file is locked, so other requests are blocked
// close the session, release lock
session_write_close();
现在人们会想,如果会话已经关闭,我们将如何读取会话值,即使在会话结束后美化,会话仍然可用。所以,我们仍然可以读取会话数据。
echo $_SESSION['id']; // will output 123
在 PHP> = 7.0 ,我们可以有 READ_ONLY 会议, READ_WRITE 会议和 lazy_write 会话,因此使用 session_write_close()
可能不需要