2011-02-23 24 views

回答

3

默認的會話處理程序使用文件,並且會在請求期間鎖定會話文件。如果您有一個長時間運行的腳本,那麼在進入腳本的「長時間運行」部分之前,您應該強制它通過執行session_write_close()來放棄會話鎖定。

如果您需要在長時間運行的部分完成後修改會話數據,您可以隨後再次使用session_start()重新打開會話。

+0

有趣的是,有沒有辦法避免在不改變代碼的情況下鎖定會話。也許在php.ini中的東西? – HyderA 2011-02-23 15:24:04

+0

雖然我意識到可能會導致一些痛苦的競爭條件。 – HyderA 2011-02-23 15:28:08

+0

不是,它是由設計 - 如果會話沒有鎖定,那麼多個並行請求將踩在文件上。更改代碼很小 - 如果長時間運行的腳本在長時間運行的過程中/之後不更改會話數據,則關閉會話將不起作用。 $ _SESSION變量仍然存在並且可用,只要腳本退出時對其進行的任何更改都不會寫出。 – 2011-02-23 15:34:55

相關問題