Інтеграція з успадкованими сесіями

Дата оновлення перекладу 2022-11-12

Інтеграція з успадкованими сесіями

Іноді може бути необхідно інтегрувати 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 буде збережено при збереженні сесії.