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.

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.

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.

A typical use of this might look like this:

1
2
3
4
5
6
7
8
9
10
11
12
13

useSymfony\Component\HttpFoundation\Session\Session;useSymfony\Component\HttpFoundation\Session\Storage\PhpBridgeSessionStorage;// legacy application configures sessionini_set('session.save_handler','files');ini_set('session.save_path','/tmp');session_start();// Get Symfony to interface with this existing session$session=newSession(newPhpBridgeSessionStorage());// 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.

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.