似乎Symfony2在请求后正在等待AJAX响应。在响应返回之前,它不会转到同一页面上的其他链接。
本文介绍了这个问题: http://garethmccumskey.blogspot.com/2009/10/php-session-write-locking-and-how-to.html
我在Symfony2中找不到解决方案。
答案 0 :(得分:14)
在阅读您所指的博客文章并阅读Session
和NativeSessionStorage
类的代码后,我试图模仿博客文章中提到的行为是为了做到这一点:< / p>
$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
更快。
的问候,
马特
答案 1 :(得分:1)
只是警告那些使用PHP内置Web服务器的人(因为我被困,可能会帮助其他人):
来自PHP文档:
Web服务器只运行一个单线程进程,因此如果请求被阻止,PHP应用程序将停止运行。
这意味着即使你正确地关闭了会话,你仍然会一次连接一个连接。