Хук auth_cookie_expiration
позволяет вам изменять продолжительность жизни авторизационных cookies, которые используются для входа пользователей в WordPress. Этот хук предоставляет возможность динамически настраивать, как долго cookies будут действовать в зависимости от различных факторов, таких как роль пользователя или флаг «Запомнить меня».
apply_filters( ‘auth_cookie_expiration’, int $length, int $user_id, bool $remember )
Параметры
- $length (int): Продолжительность жизни cookies в секундах. Это значение по умолчанию, которое будет использовано.
- $user_id (int): ID пользователя, для которого устанавливается время жизни cookie.
- $remember (bool): Указывает, выбрана ли опция «Запомнить меня» при авторизации. Если
true
, то время жизни cookies будет увеличено.
Пример 1: Удлинение срока действия cookies для всех пользователей
Вы можете продлить время жизни cookies для всех пользователей в два раза от текущего значения. Это может быть полезно, если вы хотите сделать сессии пользователей более долгими.
add_filter( 'auth_cookie_expiration', 'my_auth_cookie_expiration', 20, 3 );
function my_auth_cookie_expiration( $expiration, $user_id, $remember ) {
// Удлиняем время жизни cookie в два раза
return $expiration * 2;
}
Пример 2: Удлинение срока действия cookies в зависимости от роли пользователя
Иногда полезно изменить продолжительность сессии в зависимости от роли пользователя. В следующем примере для администратора время жизни cookies будет 20 дней, если выбран флаг «Запомнить меня», и 5 дней, если флаг не установлен. Для всех других пользователей время жизни будет зависеть от того, выбрали ли они опцию «Запомнить меня».
add_filter( 'auth_cookie_expiration', 'cookie_expiration_new', 20, 3 );
function cookie_expiration_new( $expiration, $user_id, $remember ) {
// Время жизни cookies для администратора
if ( $remember && user_can( $user_id, 'manage_options' ) ) {
// Если установлена галочка "Запомнить меня"
if ( $remember == true ) {
return 20 * DAY_IN_SECONDS; // 20 дней
}
// Если галочка не установлена
return 5 * DAY_IN_SECONDS; // 5 дней
}
// Для всех остальных пользователей
if ( $remember == true ) {
return 360 * DAY_IN_SECONDS; // 360 дней (1 год)
}
return 180 * DAY_IN_SECONDS; // 180 дней (полгода)
}
Пример 3: Установить продолжительность сессии в зависимости от роли пользователя
Можно установить длительность сессии для определённых ролей, например, для администраторов установить продолжительность в 1 год, а для пользователей с другими ролями — в 1 месяц.
add_filter('auth_cookie_expiration', 'custom_auth_cookie_expiration', 10, 3);
function custom_auth_cookie_expiration($expiration, $user_id, $remember) {
// Проверяем роль пользователя
if ( user_can($user_id, 'administrator') ) {
// Для администраторов — сессия на год
return YEAR_IN_SECONDS;
}
// Для остальных пользователей — сессия на месяц
return MONTH_IN_SECONDS;
}
Пример 4: Установка бесконечного срока действия cookies для определённой роли
В некоторых случаях может возникнуть необходимость сделать срок действия cookies практически бесконечным для пользователей с определённой ролью. Например, для пользователей с ролью «редактор» или «администратор» можно установить максимально возможное время жизни cookies.
add_filter('auth_cookie_expiration', function($length) {
// Для администраторов или редакторов время жизни cookie установим максимально долгим
if ( current_user_can('administrator') || current_user_can('editor') ) {
return PHP_INT_MAX;
}
return $length;
});
Заключение
Хук auth_cookie_expiration
является мощным инструментом для настройки времени жизни авторизационных cookies в WordPress. С его помощью вы можете гибко управлять продолжительностью сессий пользователей, исходя из их ролей или других факторов. Эти настройки полезны для повышения удобства пользователей или обеспечения дополнительной безопасности на сайте.