【发布时间】:2011-09-08 16:20:21
【问题描述】:
看起来 Symfony2 在请求后正在等待 AJAX 响应。在响应返回之前,它不会转到同一页面上的另一个链接。
这篇文章描述了这个问题: http://garethmccumskey.blogspot.com/2009/10/php-session-write-locking-and-how-to.html
我在 Symfony2 中找不到解决方案。
【问题讨论】:
标签: symfony
看起来 Symfony2 在请求后正在等待 AJAX 响应。在响应返回之前,它不会转到同一页面上的另一个链接。
这篇文章描述了这个问题: http://garethmccumskey.blogspot.com/2009/10/php-session-write-locking-and-how-to.html
我在 Symfony2 中找不到解决方案。
【问题讨论】:
标签: symfony
在阅读了您所指的博客文章并阅读了 Session 和 NativeSessionStorage 类的代码后,我会尝试模仿博客文章中提到的行为:
$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 应用程序将停止。
这意味着即使你正确地关闭了会话,你仍然会一次连接一个连接。
【讨论】: