发布于 2015-08-27 16:50:31 | 173 次阅读 | 评论: 0 | 来源: 网络整理
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 Session framework. 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:
use SymfonyComponentHttpFoundationSessionSession; use SymfonyComponentHttpFoundationSessionStoragePhpBridgeSessionStorage; // 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 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.