會話鎖定
我們都知道 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()
可能不需要