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