Продление сессии на BitrixVM: полное руководство

Продление сессии на BitrixVM

Проблема слетающей авторизации в BitrixVM чаще всего связана с конфликтом настроек безопасности сервера и самой CMS. В этой статье мы разберем, как правильно настроить серверный уровень (PHP) и уровень приложения (Битрикс), чтобы авторизация работала стабильно и долго.

1. Базовая проверка настроек

Прежде чем принудительно увеличивать время жизни сессии, убедитесь, что в системе нет «базовых» препятствий:

  • Лишние символы в скриптах: Проверьте файлы dbconn.php, init.php и after_connect.php в папке bitrix/php_interface/. В коде не должно быть переносов строк или пробелов перед <? и после ?>. Это частая причина ошибок заголовков.
  • Домен и куки (значение session.cookie_domain в /etc/php.ini): Если поле пустое — это правильно для работы с одним основным доменом. Если вы используете поддомены, убедитесь, что домен указан верно (например, .mysite.ru с точкой).
  • Настройки сайта: В административной панели (Настройки > Настройки продукта > Сайты > Список сайтов) проверьте поля «URL сервера» и «Путь к корневой папке».

Файл .access.php: При переносе сайта убедитесь, что в корне есть файл .access.php с содержанием:

<?$PERM["/"]["*"]="R"; ?>

Без него права доступа для всех пользователей могут автоматически стать «Запрещено».

Так же посмотрите настройки главного модуля:

  • Продлевать сессию при активности посетителя в окне браузера: да
  • Продлевать сессию только для авторизованных посетителей: да
  • Показывать пользователям сообщение об окончании сессии: да
  • Защитить выход пользователя из системы от CSRF: да
  • Разрешить запоминание авторизации: да
  • Распространять куки на все домены (только для https): да
  • Устанавливать для кук авторизации атрибут secure (только для https): да
  • Если у вас несколько сайтов, в настройках Главного модуля включите опцию «Распространять авторизацию на все домены».

2. Настройка долгой сессии на стороне сервера

PHP по умолчанию удаляет сессии через 24 минуты (1440 секунд). Чтобы продлить их, нужно изменить настройки. В BitrixVM рекомендуется создавать отдельный файл, чтобы настройки не «слетели» при обновлении системы.

Шаги по настройке:

  1. Зайдите на сервер через SSH под пользователем root.
  2. Создайте файл /etc/php.d/z_bx_custom_settings.ini:
    nano /etc/php.d/z_bx_custom_settings.ini

    Если файла не существует, эта команда создаст его. Файлы в /etc/php.d/ подгружаются в алфавитном порядке, поэтому файл на букву z загрузится последним и перекроет остальные настройки.

  3. Добавьте в него строки (31536000 секунд = 1 год):
    [PHP]
    session.gc_maxlifetime = 31536000
    session.cookie_lifetime = 31536000
  4. Сохраните изменения (Ctrl+O, Enter, Ctrl+X) и перезапустите Apache:
    systemctl restart httpd

Как это работает:

Когда PHP запускается, он последовательно читает настройки. Последним он считывает ваш файл z_bx_custom_settings.ini. Установив session.gc_maxlifetime = 31536000, вы поднимаете «потолок» — теперь сервер не будет удалять файлы сессий как «мусор» в течение года.

3. Настройка в админке Битрикса

После настройки сервера в игру вступают политики безопасности самой CMS.

  • Хранение сессий в БД: Это самое надежное решение для BitrixVM. В настройках Главного модуля (вкладка «Безопасность») включите хранение сессий в базе данных. Это делает сессию независимой от системной очистки временных файлов в папке /tmp.
  • Маска сети: В настройках группы пользователей (Настройки > Пользователи > Группы) убедитесь, что поле «Маска сети для привязки сессии» пустое или стоит «Не переопределять». Любые цифры там (например, 255.255.255.255) будут «убивать» сессию при смене вашего динамического IP-адреса.
  • Приоритет настроек: Помните, что настройки группы в админке Битрикса приоритетнее настроек сервера. Если в PHP разрешен год, но в группе пользователя стоит ограничение 60 минут — сессия завершится через час.

Как проверить, что всё заработало

  1. Галочка «Запомнить меня»: При входе в админку всегда отмечайте этот пункт. Он создает долгоживущую куку авторизации.
  2. Проверка через phpinfo(): Создайте технический файл php_check.php с кодом <?php phpinfo(); ?>, откройте его в браузере и найдите session.gc_maxlifetime. В колонке Local Value должно стоять ваше значение 31536000.Важно: после проверки удалите этот файл!
  3. Тест: Войдите в систему, закройте браузер, подождите 30-40 минут и попробуйте вернуться. Вы должны остаться авторизованными.
  4. Файл .settings.php: Если вылеты продолжаются, проверьте файл bitrix/.settings.php. В нем должна быть активна секция с 'type' => 'database' для сессий.

Примечание: Если вы используете конфигурацию с поддоменами, обратите внимание на статью «Авторизация при поддоменности» в курсе «Многосайтовость» на портале 1С-Битрикс, так как там могут потребоваться дополнительные настройки кук.

Поделись, если оказалось полезно :)
Нет комментариев

Написать