1

概要を説明するには:

私は Symfony1 で構築されたアプリを持っていますが、Symfony2 で新しい部分を構築しています。Symfony2 のログイン/ログアウト アクションを移動し、Symfony1 が Symfony2 からセッション データを読み取れるようにしました。Symfony2 にセッション データをデフォルトの PHP $_SESSION に書き込むように指示することで、うまく機能し、すべてが配列にあり、Symfony1 はデータを読み取ってユーザーを自動的にログインできます。

現在、Symfony1 アプリと Symfony2 アプリをそれぞれの VM に移動しています。そのため、PHP $_SESSION で記述する代わりに、セッションを MongoDB に保存します (MongoDbSessionHandler を使用)。しかし、Symfony1 アプリからセッション データを読み取ると、次のような結果になります。

_sf2_attributes|a:0:{}_sf2_flashes|a:0:{}_sf2_meta|a:3:{s:1:"u";i:1362655964;s:1:"c";i:1362655964;s:1:"l";s:1:"0";}

そして、それは間違いなく非シリアル化できません。Symfony2 は独自の方法でデータをシリアライズしているようで、これらの _sf2_* はメタデータバッグだと思います。問題は、このシリアル化がどこで行われているのかを見つけることができないということです。シリアル化を解除できるようにするには、シリアル化されている方法を見つける必要があります。私が見つけた最も近い場所は、SessionHandlerProxy です。

public function write($id, $data)
{
    return (bool) $this->handler->write($id, $data);
}

ここで渡された $data にはシリアル化されたデータが含まれていますが、それが呼び出されたコードが見つかりません。

運が良ければ?

4

1 に答える 1

2

MongoDbSessionHandler は、PHP セッション保存ハンドラーとして設定されます: https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpFoundation/Session/Storage/NativeSessionStorage.php#L349-L370

session_start() ( https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpFoundation/Session/Storage/NativeSessionStorage.php#L146 ) 実際にセッションファイル/Mongoの内容を読み込んで作成グローバル $_SESSION 変数: http://www.php.net/manual/en/function.session-start.php

PHP の session_decode 関数を見てください: http://www.php.net/manual/en/function.session-decode.php - これはあなたが探しているものかもしれません。

于 2013-03-08T06:45:13.263 に答える