【问题标题】:How do I kill a session in Symfony2?如何在 Symfony2 中终止会话?
【发布时间】:2011-09-08 16:20:21
【问题描述】:

看起来 Symfony2 在请求后正在等待 AJAX 响应。在响应返回之前,它不会转到同一页面上的另一个链接。

这篇文章描述了这个问题: http://garethmccumskey.blogspot.com/2009/10/php-session-write-locking-and-how-to.html

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

【问题讨论】:

    标签: symfony


    【解决方案1】:

    在阅读了您所指的博客文章并阅读了 SessionNativeSessionStorage 类的代码后,我会尝试模仿博客文章中提到的行为:

    $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 快得多。

    问候,
    马特

    【讨论】:

    【解决方案2】:

    对于那些使用 PHP 内置 web 服务器的人来说只是一个警告(因为我被困住了,它可能会帮助其他人):

    来自 PHP 文档:

    Web 服务器只运行一个单线程进程,因此如果请求被阻止,PHP 应用程序将停止。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      • 2022-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      相关资源
      最近更新 更多