我在 Symfony 在每个页面加载时创建一个新会话而不是跨请求携带数据时遇到问题。 config.yml 中会话部分的 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
有人有主意吗?
Edit:
我想我取得了一些进步。我对测试操作做了以下更改:
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 个保留会话。然而,在第三次请求时,它被清除了。