微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP-Symfony2无法正确保存会话

我在Symfony每次页面加载时创建一个新会话时遇到了问题,而不是跨请求携带数据. config.yml的session部分中的auto_start设置为false,常规的PHP会话可以正常工作.只有在symfony中运行时,我才遇到问题.

例如,我创建了测试操作:

public function sessionTestAction()
{

    $s_Response = '<html><head></head><body><p>Foo</p></body></html>'; //Initialize response and headers
    $a_Headers = array();
    $i_StatusCode = 200;


    $oSession = $this->get('session');
    var_dump($oSession->all());

    if(!$oSession->has('Test'))
    {
        $oSession->set('Test', 'Bar');
    }

    $oSession->save();
    return new Response($s_Response, $i_StatusCode, $a_Headers);
}

预期的动作是,在第一页加载时,var_dump将不产生任何结果,并且在任何后续执行中,它将包含Test => Bar.但是,它永远不会跨请求获取该数据.

此外,它为每个请求创建一个新的会话ID.

我正在使用Symfony v2.0.15和PHP v5.4

有人有想法么?

编辑:

我认为我取得了一些进展.我对测试操作进行了以下更改:

public function sessionTestAction()
{

     //Initialize response and headers
    $oRequest = $this->get('request');
    $a_Headers = array();
    if (isset($oRequest->headers->all()['cookie']))
    {
        $a_Headers['Set-Cookie'] = $oRequest->headers->all()['cookie'];
    }
    $i_StatusCode = 200;


    $oSession = $oRequest->getSession();
    $oSession->start();
    $s_Response = print_r($oSession->all(), true);
    if(!$oSession->has('Test'))
    {
        $oSession->set('Test', 'Bar');
    }

    $oSession->save();
    $oResponse = new Response($s_Response, $i_StatusCode, $a_Headers);
    return $this->render('Bundle:Default:index.html.twig', array('response' => $s_Response), $oResponse);
}

那个树枝文件只有{{response | raw}}的地方.现在,它保留3个请求中的2个的会话.但是,第三个请求已清除.

解决方法:

原来问题是,有人运行app.PHP添加了一行来设置会话cookie,我猜不知道symfony会自己处理会话.问题解决了.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐