3

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番目のリクエストでクリアされます。

4

2 に答える 2

2

問題は、app.phpが実行されるたびに、symfonyがセッション自体を処理することを知らずに、誰かがセッションCookieを設定する行を追加したことでした。問題が解決しました。

于 2012-07-25T19:21:33.320 に答える
2

私はこの問題を数回受けました、それは非常に迷惑です。それでは、考えられる解決策について説明しましょう。

開発環境を開きます-yourdomain.com/app_dev.php/ページを数回更新してみてください。セッションIDが毎回変更されている場合は、セッションが壊れていることを意味します。

セッションID

Chromeを使用している場合(そうでない場合は、開発者に最適です;))-開発者ツールを開くことができます(F12をクリックします)。次に、[ネットワーク]タブを確認し、ページを更新して、メインのリクエストを見つけます。リクエストのヘッダーを確認してください-「Cookie:PHPSESSID」が表示される場合。 ここに画像の説明を入力してください

表示されない場合-Cookieに問題があります。私の場合は

framework:
    session:         
        cookie_domain: mydomain.com
于 2014-12-10T19:00:54.317 に答える