В этой статье мы подробно разберём, как работать с куками для авторизации пользователей в 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.
- Корректность значения и отсутствие ошибок в коде.