1

Symfony2 アプリがあり、symfony 以外の別のアプリからセッション セットを読み取る必要があります。

symfony 以外のアプリ$_SESSIONは、いつものようにセッションを に設定するだけです。

ただし、このセッションを読み取ろうとすると、データがありません。やっても構わない

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

または(これを行うべきではないことはわかっていますが、とにかく)

var_dump($_SESSION);

これにより、セッションが既に開始されているというエラーが発生し、Symfony アプリでセッションを開始したことがないにもかかわらず、エラーが発生する理由がわかりません。この方法が実際に機能するかどうかを教えて、物事を調べることができますsession_start()

$session = new Session();
$session->start();
var_dump($session->all());

Cookie は Symfony2 アプリで設定され、その値は symfony 以外のアプリで設定されたPHPSESSIDCookie と同じですが、私の Symfony2 アプリはセッションのコンテンツの読み取りを拒否するだけです。(明確にするために、を$session->getName()返しますPHPSESSID

(正確には、両方のアプリは同じドメインの下にありますが、サブドメインは異なります。私は既にSymfony アプリでframework.session.domain正しく設定しており、サブドメイン間でセッション Cookie を共有できるように、同じドメイン設定を持つように非 symfony アプリapp/config.ymlを呼び出しました) 。session_set_cookie_params.example.com

では、非 symfony アプリによって設定された Symfony2 アプリ/コントローラーのセッションをどのように読み取るのでしょうか? ありがとう。

これが問題になる場合は、Symfony 2.1 を使用しています。

4

2 に答える 2

8

カスタム セッション ハンドラーを作成する必要はありません。Symfony2 のネイティブ セッション ハンドラーは、デフォルトの PHP $_SESSION から直接読み書きできます。

Symfony2 アプリの config.yml で、次のように save_path オプションを追加します。

framework:
    session:
        save_path: ~

キャッシュを消去すると、セッションは Symfony2 セッション フォルダーではなく、デフォルトの PHP パスに保存されます。データを共有できるようになりました。これは、新しい Sf2 アプリと古い Sf1 アプリの間でデータをログインするために行ったことです。

于 2013-03-08T04:53:23.817 に答える
3

ネイティブのSymfony2セッションラッパークラスはからセッションデータを読み取りapp/cache/{env}/sessions/{session_id}、Symfony2以外のアプリはその場所にセッションデータを書き込んでいないため、使用できなくなります。

その場所に書き込む非Symfony2アプリでカスタムセッションハンドラーを書くことができます。あるいは、デフォルトのSymfony2セッション読み取り場所をバイパスしてデフォルトのPHPセッションパスから取得するネイティブセッションハンドラークラスをSymfony2で書くこともできます。

編集:この回答を書いたので、以下のgadboutの投稿で利用できるはるかにエレガントなソリューションがあります。

于 2012-11-26T08:36:25.117 に答える