Integrating with Legacy Sessions

Sometimes it may be necessary to integrate Symfony into a legacy application where you do not initially have the level of control you require.

場合によっては、Symfony をレガシー アプリケーションに統合する必要がある場合があります。最初は必要なレベルの制御ができない場合があります。

As stated elsewhere, Symfony Sessions are designed to replace the use of PHP's native session_*() functions and use of the $_SESSION superglobal. Additionally, it is mandatory for Symfony to start the session.

他の場所で述べたように、Symfony セッションは、PHP のネイティブ session_*() 関数の使用と $_SESSION スーパーグローバルの使用を置き換えるように設計されています。さらに、Symfony がセッションを開始することは必須です。

However, when there really are circumstances where this is not possible, you can use a special storage bridge PhpBridgeSessionStorage which is designed to allow Symfony to work with a session started outside of the Symfony HttpFoundation component. You are warned that things can interrupt this use-case unless you are careful: for example the legacy application erases $_SESSION.

ただし、これが実際に不可能な状況がある場合は、Symfony HttpFoundation コンポーネントの外部で開始されたセッションで Symfony が動作できるように設計された特別なストレージ ブリッジ PhpBridgeSessionStorage を使用できます。注意しないと、この使用例が中断される可能性があることが警告されます。たとえば、レガシー アプリケーションは $_SESSION を消去します。

A typical use of this might look like this:

これの典型的な使用法は次のようになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\PhpBridgeSessionStorage;

// legacy application configures session
ini_set('session.save_handler', 'files');
ini_set('session.save_path', '/tmp');
session_start();

// Get Symfony to interface with this existing session
$session = new Session(new PhpBridgeSessionStorage());

// symfony will now interface with the existing PHP session
$session->start();

This will allow you to start using the Symfony Session API and allow migration of your application to Symfony sessions.

これにより、Symfony セッション API の使用を開始し、アプリケーションを Symfony セッションに移行できるようになります。

Note

ノート

Symfony sessions store data like attributes in special 'Bags' which use a key in the $_SESSION superglobal. This means that a Symfony session cannot access arbitrary keys in $_SESSION that may be set by the legacy application, although all the $_SESSION contents will be saved when the session is saved.

symfony セッションは、属性のようなデータを $_SESSION スーパーグローバルで akey を使用する特別な「バッグ」に保存します。これは、Symfony セッションが $_SESSION の任意のキーにアクセスできないことを意味します。これはレガシーアプリケーションによって設定される可能性がありますが、セッションが保存されるとすべての $_SESSION コンテンツが保存されます。