Лимит записи метаданных сесии

По умолчанию, поведение PHP-сессии заключается в том, чтобы сохранять сессию, независимо от того, изменялись ли её данные. В Symfony, каждый раз, когда был доступ к сессии, записаются метаданные (сессия использована/использовалась в последний раз), что можно использовать для определения возраста сессии и времени ожидания.

Если по причинам производительности, вы хотите лимитировать частоту, с которой сохраняется сессия, эта функция может настроить глубину детализации обновлений метаданных и сохранять сессию реже, продолжая сохранять относительно достоверные метаданные. Если изменяются другие данные сессии, то она будет сохраняться всегда.

Вы можете сказать Symfony не обновлять время метаданных "сессия была обновлена в последний раз" до того, как прошло определённое количество времени, установив в framework.session.metadata_update_threshold значение в секундах, более нуля:

  • YAML
    1
    2
    3
    framework:
        session:
            metadata_update_threshold: 120
    
  • 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:framework="http://symfony.com/schema/dic/symfony"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://symfony.com/schema/dic/services
            http://symfony.com/schema/dic/services/services-1.0.xsd
            http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
    
        <framework:config>
            <framework:session metadata-update-threshold="120" />
        </framework:config>
    
    </container>
    
  • PHP
    1
    2
    3
    4
    5
    $container->loadFromExtension('framework', array(
        'session' => array(
            'metadata_update_threshold' => 120,
        ),
    ));
    

Note

Поведение PHP по умолчанию - это сохранять сессию независимо от того, изменялась она или нет. При использовании framework.session.metadata_update_threshold, Symfony будет оборачивать обработчик сессии (сконфигурированный в framework.session.handler_id) в WriteCheckSessionHandler. Это предотвратит запись любой сессии, если она не была изменена.

Caution

Имейте в виду, что если сессия не записывается по каждому запросу, то она может подвергнуться "сборке мусра" быстрее, чем обычно. Это означает, что ваши пользователи могут выйти из системы быстрее, чем вы рассчитывали.

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.