是否有任何方法可以禁用symfony 2中某些控制器的会话?

时间:2016-01-02 01:12:21

标签: php ajax symfony session

目前我正在尝试在操作开始时关闭会话,因为这是一个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调用,一个用于向站点添加注释,另一个是长期运行的脚本,通过称为长轮询的技巧在页面上显示这些注释。但是当第二个脚本阻塞第一个脚本时会出现问题,因为两者都默认使用会话。此处描述了此问题 - Long running background PHP script blocks other PHP pages until it is finished。我找到了一个解决方案,在_closeSession中手动调用session_write_close而不是$ session-> save()。但是,还有其他更多Symfony风格的方法吗?

1 个答案:

答案 0 :(得分:0)

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

security.yml中(第3.4版):

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