В стандартной установке WordPress сессии пользователей не имеют явного ограничения по времени, что может создавать проблемы безопасности и снижать контроль над авторизацией. Особенно это актуально для сайтов с повышенными требованиями к безопасности, например, корпоративных порталов или интернет-магазинов.
Почему важно ограничивать длительность сессии в WordPress
По умолчанию WordPress хранит авторизационные куки пользователя длительное время (обычно 14 дней, если не выбрано «Запомнить меня»). Это удобно для пользователей, но представляет риск, если устройство окажется в чужих руках или сессия будет активна слишком долго.
Ограничение времени сессии позволяет:
- Минимизировать риск несанкционированного доступа;
- Улучшить безопасность при использовании общих или публичных компьютеров;
- Контролировать активность пользователей, особенно в административной части сайта.
Рассмотрим, как реализовать ограничение сессии с помощью собственных функций и плагинов.
Как задать ограничение времени сессии через код
WordPress использует куки для хранения аутентификации. В частности, время действия куки задаётся константой AUTH_COOKIE_EXPIRATION и параметрами в функции wp_set_auth_cookie(). Чтобы изменить длительность сессии, можно использовать фильтр auth_cookie_expiration.
Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:
function wplog_auth_cookie_expiration( $length, $user_id, $remember ) {
// Устанавливаем время сессии в 1 час (3600 секунд)
return 3600;
}
add_filter( 'auth_cookie_expiration', 'wplog_auth_cookie_expiration', 10, 3 );В этом примере сессия будет действовать всего 1 час независимо от выбора пользователя. Вы можете изменить значение 3600 на любое другое количество секунд.
Учет опции "Запомнить меня" для разных длительностей
Если нужно оставлять длительную сессию при выборе "Запомнить меня" и короткую — при обычном входе, используйте такой вариант:
function wplog_auth_cookie_expiration( $length, $user_id, $remember ) {
if ( $remember ) {
// 14 дней для "запомнить меня"
return 14 * DAY_IN_SECONDS;
} else {
// 1 час для обычной сессии
return 3600;
}
}
add_filter( 'auth_cookie_expiration', 'wplog_auth_cookie_expiration', 10, 3 );Автоматический выход пользователя после истечения сессии
Несмотря на изменение времени действия куки, пользователи могут оставаться авторизованными до тех пор, пока браузер не обновит куки. Чтобы обеспечить более точный контроль, можно использовать JavaScript для автологаута после истечения времени.
Пример простого скрипта, который через 1 час принудительно выведет пользователя из системы:
function wplog_enqueue_logout_script() {
if ( is_user_logged_in() ) {
$logout_url = wp_logout_url();
?>
<script>
setTimeout(function() {
window.location.href = '<?php echo esc_js( $logout_url ); ?>';
}, 3600 * 1000); // 1 час в миллисекундах
</script>
<?php
}
}
add_action( 'wp_footer', 'wplog_enqueue_logout_script' );Этот код вставляет в футер сайта скрипт, который через час перенаправит пользователя на страницу выхода.
Использование плагинов для управления сессиями
Если вы не хотите писать код, можно воспользоваться готовыми решениями. Вот несколько популярных плагинов для управления сессиями и безопасности в WordPress:
- Inactive Logout — позволяет автоматически разлогинивать пользователей после определенного времени неактивности. Имеет настройки через интерфейс.
- WP Session Manager — расширенный менеджер сессий с возможностью контроля активных сессий пользователей.
- Clearfy Pro — оптимизационный плагин, который в числе прочего позволяет настраивать параметры безопасности, включая время жизни сессии. Подробнее на wpshop.ru.
Управление сессиями администраторов и обычных пользователей
Иногда нужно задать разные ограничения для админов и обычных пользователей. Можно расширить код следующим образом:
function wplog_auth_cookie_expiration_roles( $length, $user_id, $remember ) {
$user = get_userdata( $user_id );
if ( in_array( 'administrator', (array) $user->roles ) ) {
// Для администраторов — 2 часа
return 2 * HOUR_IN_SECONDS;
} else {
// Для остальных — 1 час
return 1 * HOUR_IN_SECONDS;
}
}
add_filter( 'auth_cookie_expiration', 'wplog_auth_cookie_expiration_roles', 10, 3 );Такой подход помогает повысить безопасность, ограничивая доступ админов более коротким временем сессии.
Заключение по технической настройке сессий
Ограничение времени сессии в WordPress — важный аспект безопасности, который легко реализуется с помощью фильтра auth_cookie_expiration и дополнительных скриптов. При необходимости можно комбинировать код и готовые плагины, например, Clearfy Pro, чтобы получить удобный и надежный контроль за сессиями.
Не забывайте тестировать изменения в разных браузерах и учитывать пользовательский опыт — слишком короткие сессии могут раздражать посетителей сайта.