Интеграция с унаследованными сессиями

Интеграция с унаследованными сессиями

Иногда может быть необходимо интегрировать 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 будет сохранено при сохранении сессии.