Сессии в Битрикс по умолчанию часто живут в файлах. На нескольких вебах или при высокой нагрузке это даёт гонки, «вылет» из админки и странные CSRF. Нормальный путь — явно описать блок session в /bitrix/.settings.php (или в /.settings.php проекта) и держать сессии в БД или Redis.
Ниже — рабочая замена блока, отличие mode, типовые грабли и как проверить, что настройка реально подхватилась.
Где править
Основной файл — /bitrix/.settings.php. Если используете переопределения проекта, смотрите также /.settings.php в корне (не путать с dbconn.php). После правки нужен сброс PHP opcache / перезагрузка php-fpm, иначе старый массив настроек может жить в памяти воркера.
Сессии в базе (типовой вариант)
Подходит для одного сервера и небольших кластеров без отдельного Redis:
'session' => [
'value' => [
'mode' => 'default',
'handlers' => [
'general' => [
'type' => 'database',
],
],
],
],
type => database переводит хранение в таблицы ядра (сессии читаются/пишутся через механизм Битрикс). Это убирает зависимость от общей session.save_path на диске между нодами — при условии, что все ноды смотрят в одну БД.
Redis / Memcached
На BitrixVM и высоконагруженных витринах чаще выносят сессии в Redis. Конкретный handler зависит от версии ядра и окружения; идея та же — не файлы на локальном диске каждой ноды. Если Redis уже подключён для кэша (см. Redis для кэша в Битрикс), уточните у хостера/в документации VM актуальный блок handlers под вашу сборку — копировать «с форума 2018 года» опасно.
mode: default и separated
В современных ядрах встречается режим раздельных сессий (публичка / админка). Если в проекте уже стоит mode => 'separated', не откатывайте его «на глаз» только ради database-handler — сначала поймите, зачем его включали (безопасность админки, разные lifetime). Меняйте handler, сохраняя нужный mode.
Что проверить после правки
- Залогиньтесь в админку, откройте два раздела в соседних вкладках — сессия не должна «отваливаться» сразу.
- На кластере повторите логин через разные балансируемые ноды (sticky session на LB всё равно полезен, но хранилище уже общее).
- В
phpinfo()или через временный скрипт убедитесь, что не остался старыйsession.save_handler=filesкак единственный механизм без Битрикс-обёртки. - Если появляется «Ваша сессия истекла» — смотрите также домен cookie, HTTPS и
session.cookie_secure, не только handler. Разбор симптома: вылет из админки.
Типичные ошибки
- Правили не тот файл (кэш старого
.settings.phpв opcache). - Синтаксическая ошибка в PHP-массиве — сайт падает на белом экране; держите бэкап файла.
- Смешали кавычки/запятые при копипасте из статьи.
- Ожидали, что смена session в
.settings.phpпочинит CSRF при неверномcookie_domain— это разные слои.
Вывод
Блок session в .settings.php — место, где вы явно выбираете хранилище сессий Битрикс. Для большинства проектов старт — type => database; для кластера смотрите Redis и единый конфиг на всех нодах. После правки обязательно сбросьте opcache и проверьте логин в админку на реальном URL сайта.
