2011-09-08 76 views

回答

14

讀你指的博客文章和閱讀SessionNativeSessionStorage類的代碼後,我會嘗試模仿博客文章mentionned的行爲是要做到這一點:

$session = $this->get('session'); 

// Change the session attributes 

$session->save(); 
session_write_close(); 

// Do database calls and other stuff. 

我沒有測試它,但它應該按預期工作。解決您的問題的另一種方法是使用與默認使用的NativeSessionStorage不同的會話存儲。您可以通過使用PdoSessionStorage對象來使用例如數據庫存儲。這可以防止PHP使用鎖。有關如何爲會話使用數據庫存儲的更多信息,請參閱此cookbook entry

但是,不能保證數據庫系統在訪問同一行時不會堆疊多個請求,但應該快於NativeSessionStorage

問候,
馬特

+0

經過測試,效果很好! – AlterPHP

+0

非常好,謝謝你測試瞭解決方案:) – Matt

+0

如果你不介意我在這篇博文中引用了你的解決方案:http://blog.alterphp.com/2012/08/how-to-deal-with -asynchronous-request.html。讓我知道你是否感到煩惱...... – AlterPHP

1

只是爲那些誰正在使用的PHP警告內置的Web服務器(如我被困,它可能會幫助別人):

從PHP文檔:

Web服務器只運行一個單線程進程,因此如果請求被阻止,PHP應用程序將停止運行。

這意味着即使您正確關閉會話,您仍然會一次結束一個連接。

http://php.net/manual/en/features.commandline.webserver.php