有啥方法可以禁用 symfony 2 中某些控制器的会话?

Posted

技术标签:

【中文标题】有啥方法可以禁用 symfony 2 中某些控制器的会话?【英文标题】:Is there any way to disable session for some controllers in symfony 2?有什么方法可以禁用 symfony 2 中某些控制器的会话? 【发布时间】:2016-04-06 07:45:41 【问题描述】:

目前我正在尝试在操作开始时关闭会话,因为这是一个 AJAX 操作,根本不需要任何会话。

protected function _closeSession(Request $request)

    if($request->hasSession())
        $session = $request->getSession();
        $session->save();
    


public function listAction(Request $request, $mode, $id)

    $data = [];
    $this->_closeSession($request);
    //perform long polling

    //return json response
    $response = new Response(json_encode($data));
    $response->headers->set('Content-Type', 'application/json');

    return $response;

但我从 NativeSessionStorage 收到此错误:无法启动会话,因为标头已发送。

更新:

问题是我有 2 个单独的 ajax 调用,一个用于将 cmets 添加到站点,另一个长时间运行的脚本通过称为长轮询的技巧在页面上显示这些 cmets。但是有一个问题,当第二个脚本阻止第一个脚本时,因为默认情况下两者都使用会话。此处描述了此问题 - Long running background php script blocks other PHP pages until it is finished。我找到了手动调用 session_write_close 而不是 _closeSession 中的 $session->save() 的解决方案。但是还有其他更 Symfony 风格的方法吗?

【问题讨论】:

您能否向我们解释一下终止会话背后的想法?为什么AJAX这么特别? 【参考方案1】:

如果您不需要对这些控制器进行身份验证,也许这应该是一种解决方法。

security.yml (sf 3.4):

firewalls:
    # disables session creation for assets controller
    assets:
        pattern: ^/assets
        stateless: true
        security: false

【讨论】:

以上是关于有啥方法可以禁用 symfony 2 中某些控制器的会话?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 symfony2 中禁用某些路由的监听器?

在 ajax 提交时禁用 symfony 2 csrf 令牌保护

某些用户的 UILocalNotification 音量低,有啥方法可以控制它?

禁用生产 Symfony 中的错误

有啥方法可以使用 python 中的注释在 django 中编写 URL

有啥方法可以将 Symfony PHP 框架与 Bigtable / Cassandra DB 一起使用?