Как использовать куки для авторизации в WordPress

В этой статье мы подробно разберём, как работать с куками для авторизации пользователей в WordPress. Часто возникает необходимость создавать собственные механизмы авторизации или расширять стандартный функционал, и куки тут играют ключевую роль. Я покажу примеры кода, объясню, как безопасно создавать и читать куки, а также расскажу, как интегрировать это с системой пользователей WordPress.

Что такое куки и зачем они нужны для авторизации

Куки — это небольшие текстовые файлы, которые браузер сохраняет на стороне пользователя. Они позволяют хранить информацию между запросами, например, данные сессии или уникальный идентификатор пользователя. В WordPress стандартная авторизация строится на куках, которые создаются после успешного входа.

Однако иногда нужно создать свои куки, например, для "запомнить меня" с дополнительной логикой, или для авторизации через сторонние сервисы, интегрировать одноразовые коды и т.п. Понимание работы с куками важно, чтобы избежать проблем с безопасностью и некорректной работой сайта.

Создание и установка куки в WordPress

Для создания куки в PHP используется функция setcookie(). В WordPress важно устанавливать куки до вывода любого контента, поэтому лучше делать это на хуках, которые срабатывают рано, например, init.

function wordpressy_set_custom_auth_cookie() {
    if ( is_user_logged_in() ) {
        $user_id = get_current_user_id();
        $cookie_value = 'user_' . $user_id . '_' . wp_hash( $user_id );
        // Устанавливаем куку на 7 дней
        setcookie('wordpressy_auth', $cookie_value, time() + 7 * DAY_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN, is_ssl(), true);
    }
}
add_action('init', 'wordpressy_set_custom_auth_cookie');

В этом примере мы создаём куку wordpressy_auth, которая содержит ID пользователя и хеш. Флаги is_ssl() и true для HttpOnly повышают безопасность.

Пояснения к параметрам setcookie

  • Имя куки — уникальное, чтобы не конфликтовать с другими.
  • Значение — хранит идентификатор и контрольную сумму.
  • Время жизни — обычно несколько дней.
  • Путь (path) и домен — определяют, где кука доступна.
  • Флаг Secure — кука передаётся только по HTTPS.
  • HttpOnly — запрещает доступ к куке из JS, снижая риск XSS.

Чтение и проверка куки при авторизации

Чтобы использовать куки для авторизации, нужно читать её и проверять при каждом запросе. Например, если пользователь не вошёл стандартным способом, но у него есть валидная кука, можно автоматически залогинить его.

function wordpressy_authenticate_via_cookie() {
    if ( ! is_user_logged_in() && isset($_COOKIE['wordpressy_auth']) ) {
        $cookie = sanitize_text_field( wp_unslash( $_COOKIE['wordpressy_auth'] ) );
        // Формат куки: user_{user_id}_{hash}
        if ( preg_match('/^user_(\d+)_(.+)$/', $cookie, $matches) ) {
            $user_id = intval($matches[1]);
            $hash = $matches[2];
            if ( $hash === wp_hash( $user_id ) ) {
                $user = get_user_by('id', $user_id);
                if ( $user ) {
                    wp_set_current_user( $user_id );
                    wp_set_auth_cookie( $user_id );
                }
            }
        }
    }
}
add_action('init', 'wordpressy_authenticate_via_cookie');

Этот код проверяет куку, сравнивает хеш и если всё верно — автоматически авторизует пользователя через стандартные функции WordPress.

Безопасность при работе с куками

Очень важно тщательно проверять данные из куки, избегать прямого использования без очистки, использовать флаги Secure и HttpOnly. Никогда не храните в куках пароли или секреты в открытом виде. Лучше всего использовать хеши и токены с ограниченным сроком действия.

Примеры плагинов для расширенной авторизации с куками

Для реализации сложных сценариев авторизации с куками можно воспользоваться готовыми плагинами или расширить их. Например:

  • Clearfy Pro — плагин для оптимизации и безопасности, позволяет настраивать куки для пользователей.
  • WPCommunity — расширение для создания форумов с собственными сессиями и куками.

Вы можете создавать собственные плагины с подобной логикой, используя описанные выше примеры кода.

Как удалить и обновить куки корректно

Чтобы удалить куку, установите время её жизни в прошлое. Например:

function wordpressy_delete_custom_cookie() {
    if ( isset( $_COOKIE['wordpressy_auth'] ) ) {
        setcookie('wordpressy_auth', '', time() - 3600, COOKIEPATH, COOKIE_DOMAIN, is_ssl(), true);
    }
}
add_action('wp_logout', 'wordpressy_delete_custom_cookie');

Так можно автоматически удалять куки при выходе пользователя из системы. Также обновлять куки нужно при изменении данных пользователя или продлении сессии.

Советы по отладке куков

Если куки не работают, проверьте:

  • Вызывается ли setcookie до вывода содержимого.
  • Правильность домена и пути.
  • Наличие флагов Secure и HttpOnly.
  • Корректность значения и отсутствие ошибок в коде.
Автоматическое удаление старых черновиков в WordPress: как настроить и оптимизировать
12.04.2026
Автоматическое изменение стоимости товара в WooCommerce при изменении атрибутов
07.05.2026
Автоматический импорт продуктов в WordPress: настройка и примеры
17.02.2026
Как удалить неиспользуемые шорткоды в WordPress: практическое решение с примерами кода
15.04.2026
Как использовать шорткоды в WordPress для вставки динамического контента
23.03.2026