В стандартном функционале WordPress сессии пользователя реализованы через cookies и механизм авторизации, но по умолчанию время жизни сессии не всегда соответствует требованиям конкретного проекта. Особенно это актуально для сайтов с повышенными требованиями к безопасности, интернет-магазинов и порталов с личными кабинетами. В этой статье мы подробно разберём, как установить лимит по времени для сессий в WordPress, чтобы автоматически завершать сессию пользователя после заданного периода бездействия.
Почему важно контролировать время сессии в WordPress
По умолчанию WordPress хранит сессию авторизованного пользователя в cookie wordpress_logged_in_, время жизни которого обычно составляет 48 часов (для обычной авторизации) или 14 дней (если выбран "Запомнить меня"). Для некоторых сайтов это слишком долго — например, в банковских или корпоративных порталах требуется, чтобы после 15 минут бездействия пользователь был автоматически разлогинен.
Контроль времени сессии помогает:
- Повысить безопасность сайта и защитить пользовательские данные.
- Снизить риск несанкционированного доступа, если пользователь забыл выйти.
- Соответствовать требованиям политики безопасности и GDPR.
В WordPress нет встроенного простого способа гибко настраивать время жизни сессии, поэтому необходимо использовать собственные решения и плагины.
Настройка времени жизни сессии через изменение cookie cookie_lifetime
Самый простой способ — изменить время жизни cookies, отвечающих за авторизацию.
Для этого используем хук auth_cookie_expiration, который позволяет задавать время жизни cookie авторизации.
Пример кода, который устанавливает лимит в 15 минут:
add_filter('auth_cookie_expiration', 'wp_host_auth_cookie_expiration', 99, 3);
function wp_host_auth_cookie_expiration($length, $user_id, $remember) {
// 15 минут в секундах
return 15 * 60;
}Этот код нужно добавить в файл functions.php вашей темы или в отдельный плагин. После этого время жизни cookie будет 15 минут, и пользователь будет автоматически разлогиниваться после этого времени.
Однако есть нюанс: если пользователь активно работает на сайте (например, делает ajax-запросы), cookie не обновляется автоматически, и сессия завершится ровно спустя 15 минут, даже если пользователь не бездействует. Для продвинутого контроля нужна дополнительная логика.
Автоматическое завершение сессии при бездействии: решение с помощью JavaScript и AJAX
Для реализации автоматического выхода после бездействия пользователя на клиенте требуется:
- Отслеживать активность пользователя (мышь, клавиатура, прокрутка).
- При отсутствии активности в течение заданного времени отправлять AJAX-запрос на сервер, который завершит сессию.
- Перенаправить пользователя на страницу входа или показать сообщение.
Пример JavaScript-кода, который можно добавить в футер темы или через enqueue скриптов:
let idleTime = 0;
const idleLimit = 15 * 60; // 15 минут в секундах
function resetIdleTime() {
idleTime = 0;
}
document.onload = resetIdleTime;
document.onmousemove = resetIdleTime;
document.onkeypress = resetIdleTime;
document.onscroll = resetIdleTime;
setInterval(() => {
idleTime++;
if (idleTime >= idleLimit) {
// Отправляем AJAX-запрос для выхода
fetch(wpHost.ajaxUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'X-WP-Nonce': wpHost.nonce
},
body: 'action=wp_host_logout'
})
.then(response => response.json())
.then(data => {
if (data.success) {
window.location.href = data.redirect_url;
}
});
}
}, 1000);Для работы этого кода нам нужно зарегистрировать AJAX-обработчик в WordPress, который завершит сессию:
add_action('wp_ajax_wp_host_logout', 'wp_host_logout_callback');
add_action('wp_ajax_nopriv_wp_host_logout', 'wp_host_logout_callback');
function wp_host_logout_callback() {
wp_host_logout_user();
wp_send_json_success(['redirect_url' => wp_login_url()]);
}
function wp_host_logout_user() {
wp_logout();
// Дополнительно можно очистить куки, если нужно
}Не забудьте локализовать переменные wpHost.ajaxUrl и wpHost.nonce с помощью функции wp_localize_script при подключении скрипта.
Использование плагинов для управления временем сессии
Если вы не хотите писать код самостоятельно, можно использовать готовые плагины, которые позволяют управлять временем сессии и выходом пользователя:
- Inactive Logout — плагин для автоматического выхода пользователя после определённого времени бездействия.
- Clearfy Pro — комплексный плагин для оптимизации и безопасности WordPress, в котором есть опция контроля сессий.
Эти решения помогут быстро настроить лимит времени сессии без вмешательства в код.
Дополнительные советы по безопасности сессий WordPress
Для усиления безопасности сессий рекомендуем:
- Использовать HTTPS на всем сайте, чтобы защитить cookies от перехвата.
- Регулярно обновлять WordPress, темы и плагины для устранения уязвимостей.
- Ограничить количество одновременных сессий для одного пользователя через плагины или кастомные решения.
- Настроить Content Security Policy и HTTP headers для защиты от XSS и CSRF атак.
Также можно интегрировать двухфакторную аутентификацию, чтобы повысить уровень защиты пользователей.