如何在Symfony2中终止会话?

时间:2011-09-08 16:20:21

标签: symfony

似乎Symfony2在请求后正在等待AJAX​​响应。在响应返回之前,它不会转到同一页面上的其他链接。

本文介绍了这个问题: http://garethmccumskey.blogspot.com/2009/10/php-session-write-locking-and-how-to.html

我在Symfony2中找不到解决方案。

2 个答案:

答案 0 :(得分:14)

在阅读您所指的博客文章并阅读SessionNativeSessionStorage类的代码后,我试图模仿博客文章中提到的行为是为了做到这一点:< / 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应用程序将停止运行。

这意味着即使你正确地关闭了会话,你仍然会一次连接一个连接。

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