似乎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