Свяжите унаследованные приложение с сессиями Symfony

Свяжите унаследованные приложение с сессиями 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.