似乎Symfony2在請求後正在等待AJAX響應。在響應回來之前,它不會轉到同一頁面上的另一個鏈接。如何殺死Symfony2中的會話?
本文介紹的問題: http://garethmccumskey.blogspot.com/2009/10/php-session-write-locking-and-how-to.html
我找不到Symfony2的一個解決方案,但。
似乎Symfony2在請求後正在等待AJAX響應。在響應回來之前,它不會轉到同一頁面上的另一個鏈接。如何殺死Symfony2中的會話?
本文介紹的問題: http://garethmccumskey.blogspot.com/2009/10/php-session-write-locking-and-how-to.html
我找不到Symfony2的一個解決方案,但。
讀你指的博客文章和閱讀Session
和NativeSessionStorage
類的代碼後,我會嘗試模仿博客文章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
。
問候,
馬特
只是爲那些誰正在使用的PHP警告內置的Web服務器(如我被困,它可能會幫助別人):
從PHP文檔:
Web服務器只運行一個單線程進程,因此如果請求被阻止,PHP應用程序將停止運行。
這意味着即使您正確關閉會話,您仍然會一次結束一個連接。
經過測試,效果很好! – AlterPHP
非常好,謝謝你測試瞭解決方案:) – Matt
如果你不介意我在這篇博文中引用了你的解決方案:http://blog.alterphp.com/2012/08/how-to-deal-with -asynchronous-request.html。讓我知道你是否感到煩惱...... – AlterPHP