Бесплатный экспресс-аудит сайта Безопасность, SEO, AI-поиск и 152-ФЗ — отчёт с баллами за минуту Проверить сайт
Обсудить проект

Слетает авторизация в административной части: причины

Выбрасывает из административной части каждые несколько минут или сразу после ввода пароля. Причин несколько, и проверяются они по убыванию частоты.

Что проверять

  1. Каталог для сессий. Если он недоступен для записи или чистится слишком агрессивно, сессии теряются. Посмотрите путь в настройках PHP и права на него.
  2. Время жизни сессии и параметры сборки мусора в настройках PHP: они определяют, как быстро сессия считается устаревшей.
  3. Параметры cookie: домен, путь, признаки secure и SameSite. Частый случай — сайт открывается и с www, и без, cookie ставится на один вариант, а посетитель ходит по второму.
  4. Время на сервере. Расхождение часов ломает проверку срока: сессия считается просроченной сразу после создания.
  5. Несколько серверов. За балансировщиком сессии должны лежать в общем хранилище, иначе авторизация живёт только на том сервере, где вы вошли.
  6. Привязка сессии к адресу. В настройках безопасности её можно включить; при работе через мобильный интернет адрес меняется, и сессия рвётся.

Как сузить поиск

Проверьте, слетает ли авторизация в публичной части или только в административной.

  • Только в админке — смотрите настройки безопасности продукта: привязка к адресу, время неактивности, одноразовые пароли.
  • Везде — проблема на уровне сессий или cookie.
  • Только у части сотрудников — смотрите их сеть: мобильный интернет, корпоративный прокси с меняющимся адресом, расширения браузера, чистящие cookie.

После перехода на https

Отдельный сценарий: сайт перевели на защищённый протокол, и авторизация перестала держаться. Проверьте признак secure у cookie и то, что сайт не перекидывает между протоколами. Смешанный доступ даёт ровно такой эффект: авторизация на одном протоколе не видна на другом.

После переноса сайта

Типичный набор: каталог сессий не создан или принадлежит не тому пользователю, время на новом сервере не синхронизировано, домен в настройках cookie остался от старого адреса. Проверяются эти три вещи за пять минут и закрывают большинство случаев.

Чего не стоит делать

Не увеличивайте время жизни сессии до бесконечности, чтобы «перестало выбрасывать». Длинная сессия в административной части — это открытый доступ к сайту с любого забытого компьютера. Сначала найдите причину, а срок жизни оставьте разумным.

И не отключайте проверки безопасности целиком: если мешает привязка к адресу, отключите её точечно, а не весь модуль.

Частые вопросы

Выбрасывает сразу после ввода пароля.

Похоже на проблему с cookie: браузер их не принимает или сразу теряет. Проверьте параметры сессионных cookie и совпадение домена, особенно если сайт открывается и с www, и без.

Началось после перехода на https.

Проверьте признак secure у cookie и то, что сайт не перекидывает между протоколами. Смешанный доступ даёт такой эффект: авторизация на одном протоколе не видна на другом.

Два сервера за балансировщиком, выбрасывает через раз.

Сессии хранятся локально на каждом сервере, а запрос попадает то на один, то на другой. Нужно общее хранилище сессий — в базе или во внешнем хранилище.

Слетает только у некоторых сотрудников.

Смотрите их сеть и браузер: мобильный интернет с меняющимся адресом, корпоративный прокси, расширения, чистящие cookie. Если в настройках включена привязка сессии к адресу, это объясняет всё.

Можно просто увеличить время жизни сессии?

Это лечение симптома, и опасное: длинная сессия в административной части означает открытый доступ к сайту с любого забытого компьютера. Сначала найдите причину.

Началось после переноса сайта.

Проверьте три вещи: каталог сессий и права на него, синхронизацию времени на новом сервере и домен в настройках cookie — он мог остаться от старого адреса.