Сессия в разделенном режиме

По умолчанию PHP обрабатывает сессии последовательно. Запросы, которые работают с одной сессией, блокируются и выполняются по очереди. Из-за этого пользователи могут столкнуться с задержками. Чтобы решить эту проблему, Bitrix Framework использует разделенный режим сессии.

Основной принцип

Сессия разделяется на две части: hot-данные и cold-данные.

Hot-данные

  • Это данные, которые используются при каждом запросе пользователя: аутентификация, авторизация и другие базовые функции. За быстрый и безопасный доступ к информации, необходимой для работы системы, отвечает внутренний механизм Bitrix Framework — KernelSession.

  • Hot-данные хранятся в неблокирующей сессии, что позволяет нескольким запросам работать с ними одновременно.

  • В качестве хранилища используются зашифрованные cookies. Данные защищены с помощью симметричного алгоритма шифрования.

Cold-данные

  • Это остальные данные, которые хранятся в сессии.

  • Cold-данные используют обычную блокирующую сессию. Блокировка начинается при первом обращении к таким данным.

  • Хранилище может быть реализовано с использованием Redis, Memcache, базы данных или других решений.

  • Блокировка сессии зависит от типа и настроек хранилища. При использовании файловой системы она происходит по умолчанию. В случае с Redis или Memcache блокировка может быть настроена иначе. Например, Redis может быть настроен на неблокирующий режим.

Настройка хранения

Для включения разделенного режима сессии измените конфигурационный файл Bitrix Framework /bitrix/.settings.php.

  1. Перейдите в папку bitrix/.

  2. Откройте файл .settings.php.

  3. Измените session[mode] на separated, чтобы включить разделенный режим сессии.

  4. Задайте время жизни сессии lifetime в секундах, например, 'lifetime' => 14400 — 4 часа.

  5. Добавьте 'kernel' => 'encrypted_cookies' в handler, чтобы hot-данные хранились в зашифрованных cookies.

return [
            //...
            'session' => [
                'value' => [
                    'mode' => 'separated',
                    'lifetime' => 14400, 
                    'handlers' => [
                        'kernel' => 'encrypted_cookies',
                        'general' => [
                            'type' => 'file',
                        ]
                    ],
                ]
            ]
        ];
        

Настройки могут быть переопределены в других конфигурационных файлах, например, в .settings_extra.php.

Примеры конфигураций для хранения данных можно посмотреть в статье Сессии.