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 |
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.
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.