Свяжите унаследованные приложение с сессиями Symfony¶
Если вы интегрируете комплексный фреймворк Symfony в унаследванное приложение,
которое начинает сессию с session_start()
, то вам всё еще может удасться
использовать управление сессией Symfony, путём использования сессии PHP-моста.
Если приложение имеет свой собственный PHP обработчик сохранений, вы можете
указать нуль для handler_id
:
- YAML
1 2 3 4
framework: session: storage_id: session.storage.php_bridge handler_id: ~
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13
<?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:framework="http://symfony.com/schema/dic/symfony" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> <framework:config> <framework:session storage-id="session.storage.php_bridge" handler-id="null" /> </framework:config> </container>
- PHP
1 2 3 4 5 6
$container->loadFromExtension('framework', array( 'session' => array( 'storage_id' => 'session.storage.php_bridge', 'handler_id' => null, ), ));
В обратном случае, если проблема просто в том, что вы не можете избежать
того, чтобы приложение начало сессию с session_start()
, то вы всё ещё
можете использовать обработчик сохранения сессий, основанный на Symfony,
указав обработчик сохранений как указано в примере ниже:
- YAML
1 2 3 4
framework: session: storage_id: session.storage.php_bridge handler_id: session.handler.native_file
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13
<?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:framework="http://symfony.com/schema/dic/symfony" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> <framework:config> <framework:session storage-id="session.storage.php_bridge" handler-id="session.storage.native_file" /> </framework:config> </container>
- PHP
1 2 3 4 5 6
$container->loadFromExtension('framework', array( 'session' => array( 'storage_id' => 'session.storage.php_bridge', 'handler_id' => 'session.storage.native_file', ), ));
Note
Если унаследованное приложение требует собственный обработчик сохранений,
не переопределяйте его. Вместо этого, установите handler_id: ~
. Отметьте,
что обработчик сохранений не может быть изменён, когда сессия была уже начата.
Если приложение запускает сессию до инициализации Symfony, то обработчик
сохранений будет уже установлен. В таком случае, вам понадобится handler_id: ~
.
Переопределяйте обработчик сохранений только в том случае, если вы уверены,
что унаследованное приложение может использовать обработчик сохранений Symfony
без каких-либо побочных эффектов, и в том, что сессия не была начата до того, как
была инциализирована Symfony.
Чтобы узнать больше, смотрите Integrating with Legacy Sessions.
Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.