На части проектов проблема не в самом входе, а в том, что пользователь остаётся авторизован слишком долго. Это критично для админок на общих компьютерах, внутренних порталов, клиентских кабинетов и сайтов с повышенными требованиями к безопасности. В WordPress за это обычно отвечают два механизма: чекбокс rememberme на форме входа и срок действия авторизационных cookies.
Ниже — рабочий способ убрать «Запомнить меня» с формы, принудительно отключить долгую сессию и при необходимости сократить время жизни авторизации для всех пользователей или только для части ролей.
Когда это действительно нужно
Не стоит отключать автологин «на всякий случай». Но есть сценарии, где это оправдано:
- внутренний корпоративный портал с общими рабочими местами;
- админка, к которой заходят подрядчики или внешние редакторы;
- личный кабинет, где нельзя оставлять сессию на неделю и дольше;
- сайт, где вход используется редко, а риск забытых сессий выше удобства.
Если у вас обычный контентный сайт с личными аккаунтами, отключение «Запомнить меня» может ухудшить UX. Тогда лучше ограничить срок сессии только для админов или редакторов.
Диагностика: что именно сейчас включает долгий вход
Перед правкой кода проверьте, откуда берётся длительная авторизация. Обычно это один из трёх вариантов:
- на форме входа есть чекбокс
rememberme; - тема или плагин подменяет форму входа и добавляет свой автологин;
- срок cookies увеличен фильтром
auth_cookie_expiration.
Если чекбокс виден, но после входа сессия всё равно короткая, значит кто-то уже ограничивает срок авторизации. Если чекбокса нет, но пользователь остаётся залогинен надолго, проверьте фильтр на срок cookie и плагины безопасности/членства.
Что проверить в первую очередь
- страницу входа: стандартная
/wp-login.phpили кастомная форма; - активные плагины, которые меняют логин-форму;
- файл
functions.phpдочерней темы и mu-plugins; - наличие фильтра
auth_cookie_expirationв коде проекта.
Решение: убрать «Запомнить меня» и сократить срок сессии
Если задача — убрать долгий вход для всех пользователей, удобнее сделать это кодом в небольшом плагине или в mu-plugins. Так настройка не потеряется при смене темы.
1. Скрыть чекбокс «Запомнить меня» на форме входа
В стандартной форме WordPress чекбокс можно убрать через фильтр login_form_defaults. Это не ломает авторизацию, а просто убирает опцию из интерфейса.
<?php
/**
* Plugin Name: Disable Remember Me on Login
*/
add_filter('login_form_defaults', function ($defaults) {
if (isset($defaults['remember'])) {
$defaults['remember'] = false;
}
return $defaults;
});Этот вариант работает для стандартной формы входа WordPress. Если у вас кастомная форма из темы или плагина, нужно искать её шаблон и убирать чекбокс там.
2. Принудительно отключить долгую сессию
Даже если кто-то отправит rememberme=forever, можно ограничить срок cookie фильтром auth_cookie_expiration. Пример ниже задаёт короткую сессию для всех пользователей.
<?php
add_filter('auth_cookie_expiration', function ($expiration, $user_id, $remember) {
return 2 * HOUR_IN_SECONDS;
}, 10, 3);Если нужно оставить более длинную сессию для администраторов, а для остальных сократить, фильтр можно сделать условным:
<?php
add_filter('auth_cookie_expiration', function ($expiration, $user_id, $remember) {
$user = get_userdata($user_id);
if (!$user) {
return $expiration;
}
if (in_array('administrator', (array) $user->roles, true)) {
return 8 * HOUR_IN_SECONDS;
}
return 2 * HOUR_IN_SECONDS;
}, 10, 3);Такой подход полезен, если редакторам и менеджерам нужен короткий рабочий сеанс, а администраторам — чуть больше времени на обслуживание сайта.
3. Если нужно полностью игнорировать rememberme
Иногда чекбокс нельзя просто скрыть: его добавляет сторонняя форма, а пользователь всё равно может передать параметр. Тогда можно принудительно сбрасывать флаг remember на этапе логина.
<?php
add_filter('authenticate', function ($user, $username, $password) {
if (is_wp_error($user) || !$user instanceof WP_User) {
return $user;
}
// Здесь можно дополнительно проверить роль или тип пользователя.
return $user;
}, 30, 3);Сам по себе этот фильтр не меняет срок cookie, но его часто используют вместе с ограничением auth_cookie_expiration, если логика входа сложнее стандартной. В большинстве случаев достаточно двух предыдущих шагов.
Сравнение подходов
| Подход | Что делает | Плюсы | Минусы |
|---|---|---|---|
| Скрыть чекбокс в форме | Убирает опцию из интерфейса | Просто, понятно пользователю | Не защищает от ручной отправки параметра |
auth_cookie_expiration | Ограничивает срок сессии | Работает на уровне ядра | Нужно аккуратно выбрать срок |
| Кастомная форма входа | Полный контроль над UX | Гибкость | Больше кода и точек отказа |
Пошаговая настройка без лишнего риска
- Сделайте резервную копию файлов и базы.
- Добавьте код в небольшой плагин или
mu-plugins, а не в родительскую тему. - Сначала скройте чекбокс на форме входа.
- Затем ограничьте срок cookie через
auth_cookie_expiration. - Проверьте вход под разными ролями.
Если на сайте есть WooCommerce или другой плагин, который использует вход в /my-account/, проверьте и эту форму. Иногда она рендерится отдельно от стандартного wp-login.php, и правка в ядре формы на неё не влияет.
Проверка результата после внедрения
После правки важно не просто увидеть скрытый чекбокс, а убедиться, что сессия реально стала короче.
- Откройте страницу входа в приватном окне.
- Проверьте, что чекбокс «Запомнить меня» отсутствует или не влияет на срок сессии.
- Войдите под тестовым пользователем.
- Закройте браузер, откройте сайт снова и проверьте, осталась ли авторизация.
- Подождите срок, который вы задали в
auth_cookie_expiration, и проверьте повторный вход.
Если используете кэш-плагины или reverse proxy, убедитесь, что страница входа не кэшируется. Иначе можно получить старую форму без изменений или, что хуже, проблемы с авторизацией.
Частые ошибки и как их исправить
Чекбокс скрыли, но сессия всё равно длинная
Значит, ограничение срока cookie не настроено. Скрытие элемента интерфейса не меняет поведение авторизации само по себе.
Изменения внесли в тему, а потом они пропали
Если код лежит в functions.php родительской темы, он исчезнет при обновлении. Перенесите его в дочернюю тему или отдельный плагин.
Кастомная форма входа не реагирует на фильтр
Некоторые плагины авторизации рисуют форму сами и не используют стандартные шаблоны WordPress. В этом случае нужно править их шаблон или искать собственные хуки плагина.
Пользователи жалуются, что их слишком часто разлогинивает
Слишком короткий срок cookie — частая причина. Не ставьте одинаковое значение для всех ролей без проверки сценариев использования. Для редакторов и админов обычно нужен более мягкий режим, чем для обычных клиентов.
Безопасность и производительность
Отключение автологина — это не замена защите от brute force и не альтернатива двухфакторной аутентификации. Но в проектах с короткими сессиями оно снижает риск того, что забытая авторизация останется активной на чужом устройстве.
С точки зрения производительности этот код почти ничего не меняет: фильтры выполняются на этапе входа, а не на каждом запросе. Главное — не добавлять лишнюю логику в auth_cookie_expiration и не делать там тяжёлые запросы к базе.
Если нужно централизованно чистить сайт от лишних настроек, дублей и мусорных сценариев входа, иногда проще сначала убрать конфликтующие плагины и проверить поведение на чистой конфигурации. Для таких задач полезен аудит активных расширений, а не только правка формы логина.