Почему в Битрикс постоянно вылетает сессия — причины и решения
Одна из самых раздражающих проблем в 1С-Битрикс — постоянные вылеты сессии.
Администратор авторизуется, начинает редактировать сайт, сохраняет элемент инфоблока и внезапно получает сообщение:
Ваша сессия истекла. Пожалуйста, пересохраните документ еще раз.
Иногда Битрикс:
- разлогинивает администратора;
- не сохраняет элементы инфоблока;
- сбрасывает авторизацию;
- выкидывает из админки;
- ломает AJAX-запросы;
- вызывает ошибки при работе с визуальным редактором.
Особенно часто это происходит:
- в многосайтовости;
- после переезда сайта;
- при настройке HTTPS;
- при использовании nginx;
- при reverse proxy;
- в Docker и облачной инфраструктуре.
Разберем основные причины, почему в Битрикс вылетает сессия, и как это исправить.
Как работает сессия в Битрикс
Битрикс использует PHP-сессии и cookie-файлы браузера.
После авторизации:
- сервер создает PHP-сессию;
- браузеру передается cookie;
- по cookie Битрикс понимает, что пользователь авторизован.
Если:
- cookie теряется;
- домен меняется;
- сессия не сохраняется;
- сервер отдает разные URL;
- идет конфликт HTTP/HTTPS
— Битрикс считает, что пользователь больше не авторизован.
Ошибка «Ваша сессия истекла»
Самая частая проблема — сообщение:
Ваша сессия истекла. Пожалуйста, пересохраните документ еще раз.
Обычно это означает, что при сохранении элемента:
- не совпал sessid;
- потерялась PHP-сессия;
- браузер не отправил cookie;
- сайт открылся уже на другом домене.
Проблема №1 — session.save_path
Очень частая причина — неправильная настройка PHP-сессий.
Проверьте параметр:
session.save_path
Например:
session.save_path = "/var/lib/php/sessions"
Каталог должен:
- существовать;
- быть доступен PHP;
- иметь права на запись.
Проверить можно командой:
php -i | grep session.save_path
Или через:
<?php phpinfo(); ?>
Что бывает на практике
- после обновления PHP меняется путь;
- PHP-FPM использует другой pool;
- Docker-контейнер очищает временные файлы;
- нет прав на запись;
- session cleanup удаляет файлы слишком быстро.
Проблема №2 — конфликт HTTP и HTTPS
Очень часто Битрикс начинает терять сессии, если сайт одновременно работает:
- по HTTP;
- по HTTPS.
Например:
- админка открылась по HTTPS;
- AJAX ушел на HTTP;
- cookie уже не подходит;
- сессия ломается.
Как проверить
Откройте DevTools браузера и посмотрите:
- нет ли mixed content;
- нет ли redirect chain;
- все ли запросы идут на HTTPS.
Как исправить
Нужно сделать:
- единый canonical-домен;
- жесткий 301 redirect;
- полный переход на HTTPS.
Пример nginx redirect:
server {
listen 80;
server_name site.ru www.site.ru;
return 301 https://site.ru$request_uri;
}
Проблема №3 — www и non-www
Еще одна классическая проблема — сайт доступен сразу по:
- site.ru;
- www.site.ru.
Для браузера это разные домены.
В итоге:
- cookie могут не совпадать;
- сессия теряется;
- админку начинает разлогинивать.
Что делать
Оставьте только один основной домен и настройте 301 redirect.
Проблема №4 — cookie domain
Иногда проблема связана с cookie domain.
Особенно это актуально:
- в multisite;
- при поддоменах;
- при reverse proxy;
- при CDN.
Например:
.site.ru
и:
site.ru
— это разные варианты поведения cookie.
В некоторых случаях Битрикс начинает путаться, особенно если:
- есть blog.site.ru;
- есть crm.site.ru;
- есть основной сайт.
Проблема №5 — многосайтовость Битрикс
В multisite ошибки сессий — одна из самых популярных проблем.
Особенно если:
- несколько сайтов работают на одном ядре;
- используются разные домены;
- есть разные протоколы;
- используется общая авторизация.
Что часто ломает сессии
- разные SITE_ID;
- разные DOCUMENT_ROOT;
- редиректы между доменами;
- авторизация между поддоменами;
- битые rewrite-правила.
На практике особенно часто проблемы возникают после переноса блога на отдельный поддомен.
Проблема №6 — reverse proxy
Если перед nginx стоит:
- Cloudflare;
- HAProxy;
- Traefik;
- балансировщик;
- CDN
— сервер может неправильно определять HTTPS.
В результате:
- часть запросов считается HTTP;
- часть HTTPS;
- cookie работают нестабильно;
- сессии сбрасываются.
Что проверить
Передается ли:
X-Forwarded-Proto
Для nginx:
proxy_set_header X-Forwarded-Proto $scheme;
Проблема №7 — redirect loop в nginx
Иногда nginx уходит в циклические редиректы:
- HTTP → HTTPS;
- HTTPS → www;
- www → non-www;
- обратно на HTTP.
В результате:
- cookie постоянно пересоздаются;
- sessid меняется;
- Битрикс теряет авторизацию.
Как проверить
Выполните:
curl -I http://site.ru
И проверьте цепочку редиректов.
Почему не сохраняются элементы инфоблока
Если элементы инфоблока:
- не сохраняются;
- сохраняются через раз;
- выдают JSON-ошибки;
- теряют данные формы
— почти всегда проблема связана именно с сессиями.
Особенно часто это бывает:
- в визуальном редакторе;
- при AJAX-сохранении;
- при больших формах;
- при загрузке файлов.
Что проверить в первую очередь
- Работает ли сайт только на HTTPS.
- Есть ли единый домен.
- Нет ли www/non-www дублей.
- Корректен ли session.save_path.
- Есть ли права на папку сессий.
- Нет ли redirect loop.
- Правильно ли работает reverse proxy.
- Не конфликтуют ли домены в multisite.
Итог
Вылеты сессий в Битрикс — это почти всегда проблема инфраструктуры, а не самой CMS.
Чаще всего виноваты:
- неправильные редиректы;
- HTTP/HTTPS конфликт;
- www/non-www;
- ошибки nginx;
- multisite;
- reverse proxy;
- неработающие PHP-сессии.
Если все настроено правильно, Битрикс работает со стабильными сессиями даже на сложных многосайтовых проектах.
Не получается самостоятельно?
Аудит сайта
Доработка сайта на 1С Битрикс
Доработка сайта на 1С Битрикс — это добавление функционала, исправление ошибок, интеграции с CRM и оптимизация работы сайта.
Повышает удобство для пользователей и эффективность бизнеса.
Комментарии