Auth_cookie_expiration — Позволяет изменить время жизни cookie используемых для авторизации пользователей. Хук-фильтр WordPress

Опубликовано: 01.09.2018

Позволяет изменить время жизни cookie используемых для авторизации пользователей.

Использование

add_filter( 'auth_cookie_expiration', 'filter_function_name_11', 10, 3 ); function filter_function_name_11( $length, $user_id, $remember ){ // filter... return $length; } $length(число) Продолжительность жизни cookie в секундах. $user_id(число) ID пользователя. $remember(true/false) Определяет нужно ли запомнить пользователя.

По умолчанию: false

Примеры

#1 продлить сессии всех пользователей в два раза от текущего значения

add_filter( 'auth_cookie_expiration', 'cookies_shifter', 20, 3 ); function cookies_shifter( $expiration, $user_id, $remember ) { return $expiration * 2; }

#2 Продлить сессию в зависимости от роли пользователя

Продлить сессию администратора до 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; } // Если не установлена return 5 * DAY_IN_SECONDS; } // Для всех остальных пользователей // Если установлена галочка if ( $remember == true ) { return 360 * DAY_IN_SECONDS; } // Если не установлена return 180 * DAY_IN_SECONDS; }

Где используется хук

... * @param mixed $secure Whether the admin cookies should only be sent over HTTPS. * Default is_ssl(). * @param string $token Optional. User's session token to use for this cookie. */ function wp_set_auth_cookie( $user_id, $remember = false, $secure = '', $token = '' ) { if ( $remember ) { /** * Filters the duration of the authentication cookie expiration period. * * @since 2.8.0 * * @param int $length Duration of the expiration period in seconds. * @param int $user_id User ID. * @param bool $remember Whether to remember the user login. Default false. */ $expiration = time() + apply_filters( 'auth_cookie_expiration', 14 * DAY_IN_SECONDS, $user_id, $remember ); /* * Ensure the browser will continue to send the cookie after the expiration time is reached. * Needed for the login grace period in wp_validate_auth_cookie(). */ $expire = $expiration + ( 12 * HOUR_IN_SECONDS ); } else { /** This filter is documented in wp-includes/pluggable.php */ $expiration = time() + apply_filters( 'auth_cookie_expiration', 2 * DAY_IN_SECONDS, $user_id, $remember ); $expire = 0; } if ( '' === $secure ) { $secure = is_ssl(); } ... ... * @since 2.8.0 * * @param int $length Duration of the expiration period in seconds. * @param int $user_id User ID. * @param bool $remember Whether to remember the user login. Default false. */ $expiration = time() + apply_filters( 'auth_cookie_expiration', 14 * DAY_IN_SECONDS, $user_id, $remember ); /* * Ensure the browser will continue to send the cookie after the expiration time is reached. * Needed for the login grace period in wp_validate_auth_cookie(). */ $expire = $expiration + ( 12 * HOUR_IN_SECONDS ); } else { /** This filter is documented in wp-includes/pluggable.php */ $expiration = time() + apply_filters( 'auth_cookie_expiration', 2 * DAY_IN_SECONDS, $user_id, $remember ); $expire = 0; } if ( '' === $secure ) { $secure = is_ssl(); } // Front-end cookie is secure when the auth cookie is secure and the site's home URL is forced HTTPS. $secure_logged_in_cookie = $secure && 'https' === parse_url( get_option( 'home' ), PHP_URL_SCHEME ); /** * Filters whether the connection is secure. * * @since 3.1.0 * ... ... if ( $switched_locale ) { restore_previous_locale(); } } // Update the cookies if the password changed. $current_user = wp_get_current_user(); if ( $current_user->ID == $ID ) { if ( isset($plaintext_pass) ) { wp_clear_auth_cookie(); // Here we calculate the expiration length of the current auth cookie and compare it to the default expiration. // If it's greater than this, then we know the user checked 'Remember Me' when they logged in. $logged_in_cookie = wp_parse_auth_cookie( '', 'logged_in' ); /** This filter is documented in wp-includes/pluggable.php */ $default_cookie_life = apply_filters( 'auth_cookie_expiration', ( 2 * DAY_IN_SECONDS ), $ID, false ); $remember = ( ( $logged_in_cookie['expiration'] - time() ) > $default_cookie_life ); wp_set_auth_cookie( $ID, $remember ); } } return $user_id; } /** * A simpler way of inserting a user into the database. * * Creates a new user with just the username, password, and email. For more * complex user creation use wp_insert_user() to specify more information. * ...
rss