Слетает авторизация в административной части: причины
Выбрасывает из административной части каждые несколько минут или сразу после ввода пароля. Причин несколько, и проверяются они по убыванию частоты.
Что проверять
- Каталог для сессий. Если он недоступен для записи или чистится слишком агрессивно, сессии теряются. Посмотрите путь в настройках PHP и права на него.
- Время жизни сессии и параметры сборки мусора в настройках PHP: они определяют, как быстро сессия считается устаревшей.
- Параметры cookie: домен, путь, признаки
secureиSameSite. Частый случай — сайт открывается и сwww, и без, cookie ставится на один вариант, а посетитель ходит по второму. - Время на сервере. Расхождение часов ломает проверку срока: сессия считается просроченной сразу после создания.
- Несколько серверов. За балансировщиком сессии должны лежать в общем хранилище, иначе авторизация живёт только на том сервере, где вы вошли.
- Привязка сессии к адресу. В настройках безопасности её можно включить; при работе через мобильный интернет адрес меняется, и сессия рвётся.
Как сузить поиск
Проверьте, слетает ли авторизация в публичной части или только в административной.
- Только в админке — смотрите настройки безопасности продукта: привязка к адресу, время неактивности, одноразовые пароли.
- Везде — проблема на уровне сессий или cookie.
- Только у части сотрудников — смотрите их сеть: мобильный интернет, корпоративный прокси с меняющимся адресом, расширения браузера, чистящие cookie.
После перехода на https
Отдельный сценарий: сайт перевели на защищённый протокол, и авторизация перестала держаться. Проверьте признак secure у cookie и то, что сайт не перекидывает между протоколами. Смешанный доступ даёт ровно такой эффект: авторизация на одном протоколе не видна на другом.
После переноса сайта
Типичный набор: каталог сессий не создан или принадлежит не тому пользователю, время на новом сервере не синхронизировано, домен в настройках cookie остался от старого адреса. Проверяются эти три вещи за пять минут и закрывают большинство случаев.
Чего не стоит делать
Не увеличивайте время жизни сессии до бесконечности, чтобы «перестало выбрасывать». Длинная сессия в административной части — это открытый доступ к сайту с любого забытого компьютера. Сначала найдите причину, а срок жизни оставьте разумным.
И не отключайте проверки безопасности целиком: если мешает привязка к адресу, отключите её точечно, а не весь модуль.
Частые вопросы
Выбрасывает сразу после ввода пароля.
Похоже на проблему с cookie: браузер их не принимает или сразу теряет. Проверьте параметры сессионных cookie и совпадение домена, особенно если сайт открывается и с www, и без.
Началось после перехода на https.
Проверьте признак secure у cookie и то, что сайт не перекидывает между протоколами. Смешанный доступ даёт такой эффект: авторизация на одном протоколе не видна на другом.
Два сервера за балансировщиком, выбрасывает через раз.
Сессии хранятся локально на каждом сервере, а запрос попадает то на один, то на другой. Нужно общее хранилище сессий — в базе или во внешнем хранилище.
Слетает только у некоторых сотрудников.
Смотрите их сеть и браузер: мобильный интернет с меняющимся адресом, корпоративный прокси, расширения, чистящие cookie. Если в настройках включена привязка сессии к адресу, это объясняет всё.
Можно просто увеличить время жизни сессии?
Это лечение симптома, и опасное: длинная сессия в административной части означает открытый доступ к сайту с любого забытого компьютера. Сначала найдите причину.
Началось после переноса сайта.
Проверьте три вещи: каталог сессий и права на него, синхронизацию времени на новом сервере и домен в настройках cookie — он мог остаться от старого адреса.