Интеграция с унаследованными сессиями
Интеграция с унаследованными сессиями
Иногда может быть необходимо интегрировать Symfony в унаследованное приложение, где у вас изначально нет необходимого уровня контроля.
Как указано в источниках, сессии Symfony созданы для замены оригинальных функций
PHP session_*()
и суперглобального использования $_SESSION
. Кроме того,
Symfony обязана начать сессию.
Однако, когда существуют обстоятельства, при которых это невозможно, вы можете
использовать специальный мост сохранения
PhpBridgeSessionStorage,
который создан для того, чтобы позволить Symfony работать с сессией, начатой вне
компонента Symfony HttpFoundation. Вас предупреждают о том, что этот случай применения
может быть прерван, если вы не будете осоторжны: к примеру, унаследованное приложение
стирает $_SESSION
.
Типичное применение этого может выглядеть так:
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;
// унаследованное приложение конфигурирует сессию
ini_set('session.save_handler', 'files');
ini_set('session.save_path', '/tmp');
session_start();
// Заставьте Symfony состыковаться с этой существующей сессией
$session = new Session(new PhpBridgeSessionStorage());
// Теперь Symfony будет состыковываться с существующей PHP сессией
$session->start();
Это позволит вам начать использовать API сессий Symfony и позволит миграцию вашего приложения в сессии Symfony.
Note
Сессии Symfony хранят данные вроде атрибутов в специальных "Мешках",
которые используют ключ $_SESSION
суперглобально. Это означает, что
сессия Symfony не может получить доступ к произвольным ключам в $_SESSION
,
которые могут быть установлены унаследованным приложением, хотя всё содержание
$_SESSION
будет сохранено при сохранении сессии.