Как установить лимит по времени для сессий в WordPress

В стандартном функционале 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

Для реализации автоматического выхода после бездействия пользователя на клиенте требуется:

  1. Отслеживать активность пользователя (мышь, клавиатура, прокрутка).
  2. При отсутствии активности в течение заданного времени отправлять AJAX-запрос на сервер, который завершит сессию.
  3. Перенаправить пользователя на страницу входа или показать сообщение.

Пример 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 атак.

Также можно интегрировать двухфакторную аутентификацию, чтобы повысить уровень защиты пользователей.

Как создать автоматический отчет о производительности WordPress с помощью кода и плагинов
02.02.2026
Как удалить redirect cycling в WordPress после переноса сайта
01.05.2026
Как использовать WP-Cron для автоматизации обработки заказов WooCommerce
16.05.2026
Как решить проблему с не отправкой писем в WordPress через SMTP
20.04.2026
Как автоматизировать удаление спама в комментариях WordPress
27.11.2025