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を作成します。
私はSymfonyv2.0.15とPHPv5.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つのセッションが開催されます。ただし、3番目のリクエストでクリアされます。