Сессия в разделенном режиме
По умолчанию PHP обрабатывает сессии последовательно. Запросы, которые работают с одной сессией, блокируются и выполняются по очереди. Из-за этого пользователи могут столкнуться с задержками. Чтобы решить эту проблему, Bitrix Framework использует разделенный режим сессии.
Основной принцип
Сессия разделяется на две части: hot-данные и cold-данные.
Hot-данные
-
Это данные, которые используются при каждом запросе пользователя: аутентификация, авторизация и другие базовые функции. За быстрый и безопасный доступ к информации, необходимой для работы системы, отвечает внутренний механизм Bitrix Framework — KernelSession.
-
Hot-данные хранятся в неблокирующей сессии, что позволяет нескольким запросам работать с ними одновременно.
-
В качестве хранилища используются зашифрованные cookies. Данные защищены с помощью симметричного алгоритма шифрования.
Cold-данные
-
Это остальные данные, которые хранятся в сессии.
-
Cold-данные используют обычную блокирующую сессию. Блокировка начинается при первом обращении к таким данным.
-
Хранилище может быть реализовано с использованием Redis, Memcache, базы данных или других решений.
-
Блокировка сессии зависит от типа и настроек хранилища. При использовании файловой системы она происходит по умолчанию. В случае с Redis или Memcache блокировка может быть настроена иначе. Например, Redis может быть настроен на неблокирующий режим.
Настройка хранения
Для включения разделенного режима сессии измените конфигурационный файл Bitrix Framework /bitrix/.settings.php.
-
Перейдите в папку
bitrix/. -
Откройте файл
.settings.php. -
Измените
session[mode]наseparated, чтобы включить разделенный режим сессии. -
Задайте время жизни сессии
lifetimeв секундах, например,'lifetime' => 14400— 4 часа. -
Добавьте
'kernel' => 'encrypted_cookies'вhandler, чтобы hot-данные хранились в зашифрованных cookies.
return [
//...
'session' => [
'value' => [
'mode' => 'separated',
'lifetime' => 14400,
'handlers' => [
'kernel' => 'encrypted_cookies',
'general' => [
'type' => 'file',
]
],
]
]
];
Настройки могут быть переопределены в других конфигурационных файлах, например, в .settings_extra.php.
Примеры конфигураций для хранения данных можно посмотреть в статье Сессии.