4

シナリオをあげよう。/auth を呼び出す AJAX 呼び出しがあります。そのページは、ユーザーが認証されているかどうかを確認し、いくつかのセッション変数を設定します (以下のコード)。

$session = $this->getRequest()->getSession();

$session->set('fbid', $fbid);
$session->set('name', $name);

// not sure if this is even needed - get the same with or without
//$session->save();

別のページに移動してそのセッションにアクセスしようとすると、空に戻ります。

これらのセッションを通常のページ (XMLHttpRequest/AJAX 経由でアクセスするページではない) に設定すると、正常に動作します。

のセッション設定は次のconfig.ymlとおりです。

session:         
    cookie_lifetime:         3600
    cookie_httponly:         false

問題があったのhttponlyではないかと思いましたが、そうではありませんでした。

助言がありますか?何か不足していますか?

* アップデート *

セキュリティ/ファイアウォールの設定は次のとおりです。

firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false

    login:
        pattern:  ^/demo/secured/login$
        security: false

    secured_area:
        pattern:    ^/demo/secured/
        form_login:
            check_path: /demo/secured/login_check
            login_path: /demo/secured/login
        logout:
            path:   /demo/secured/logout
            target: /demo/

/auth私はファイアウォールの設定をまったく変更していません。私が知る限り、 XMLHttpRequest 経由の呼び出しには影響していないはずです。

* アップデート 2 *

2セットの後に追加すること$session->shutdown()になりました(そして、シャットダウンがセッションオブジェクトメソッドではないことはわかっています)。最終的にエラーになりましたが、そのため動作を開始し、実際には $_SESSION に保存されました。そのため、そのエラーで $_SESSION に保存する必要がある場合は、保存を強制する実際のメソッドが必要です。本当に奇妙..

4

1 に答える 1

10

私は問題が何であるかを理解しました。

最初のセッションは本番環境 (AJAX / XMLHttpRequest を介して呼び出されるアクション) で作成され、次にテストしていたページは実際には開発環境でした。当時、Symfony 2 が実際に prod と dev のセッションを別々の場所に保存していたことは頭に浮かびませんでした。通常、PHP にはすべてのセッションを保存するデフォルトの場所があります。

Symfony 2 はデフォルトsession.save_pathを上書きし、それぞれに独自のものを配置します。残念ながら、これを発見する前に 1 日無駄にしました。

また、それに関する記事を書いたので、他の人が同じ問題を経験する必要はありません。

http://jondev.net/articles/Reasons_why_Symfony_2_sessions_might_not_always_persist

于 2012-09-25T01:54:00.847 に答える