Функция wp_destroy_other_sessions()
удаляет все активные сессии текущего пользователя, кроме текущей. Она была введена в WordPress с версии 4.0.0 и полезна для управления безопасностью, когда необходимо ограничить пользователя одним активным сеансом, тем самым предотвращая одновременный вход на нескольких устройствах или браузерах.
wp_destroy_other_sessions();
Описание
Эта функция используется для завершения всех сессий текущего пользователя, кроме текущей. Она может быть полезна в сценариях, когда требуется повысить уровень безопасности, например, ограничить возможность одновременного входа на нескольких устройствах.
Возвращаемое значение
- null: Функция не возвращает значения.
Применение
wp_destroy_other_sessions()
— Удаляет все сессии текущего пользователя, кроме активной.wp_destroy_all_sessions()
— Удаляет все сессии текущего пользователя, включая текущую.wp_destroy_current_session()
— Удаляет только текущую сессию пользователя.
Пример 1: Принудительное завершение всех других сессий пользователя
В этом примере, если текущий пользователь обнаруживается с несколькими активными сессиями, все сессии, кроме текущей, будут завершены с использованием функции wp_destroy_other_sessions()
.
if ( is_user_logged_in() ) {
$current_token = wp_get_session_token(); // Получаем текущий токен сессии
$all_sessions = wp_get_all_sessions( get_current_user_id() ); // Получаем все сессии пользователя
foreach ( $all_sessions as $token => $session_data ) {
// Если найдена сессия, отличная от текущей, завершаем её
if ( $token !== $current_token ) {
wp_destroy_other_sessions();
break;
}
}
}
Этот код позволяет обеспечить, чтобы у пользователя была только одна активная сессия, завершив все остальные сессии, кроме текущей.
Пример 2: Принудительный выход с других устройств
Для реализации функционала выхода с других устройств, вы можете использовать функцию wp_destroy_other_sessions()
после авторизации пользователя. Это может быть полезно в системах, где нежелательно, чтобы один пользователь был одновременно авторизован на нескольких устройствах.
add_action( 'wp_login', 'limit_user_to_one_session', 10, 2 );
function limit_user_to_one_session( $user_login, $user ) {
// Завершаем все сессии кроме текущей сразу после успешного входа
wp_destroy_other_sessions();
}
После входа в систему, эта функция завершит все активные сессии для текущего пользователя, за исключением той, через которую он только что вошел.
Пример 3: Удаление всех сессий пользователя
Если вам нужно удалить абсолютно все сессии пользователя, включая текущую, вы можете использовать функцию wp_destroy_all_sessions()
:
if ( is_user_logged_in() ) {
wp_destroy_all_sessions();
}
Когда использовать wp_destroy_other_sessions()
- Управление безопасностью: Если вам нужно ограничить количество активных сессий для пользователя и предотвратить одновременные входы с разных устройств.
- Обеспечение защиты данных: Применяется в случаях, когда важно гарантировать, что доступ к аккаунту имеет только один активный сеанс пользователя.
- Контроль доступа: Когда пользователь должен иметь возможность входить в систему только с одного устройства в текущий момент времени.
Заключение
Функция wp_destroy_other_sessions()
— это мощный инструмент для управления пользовательскими сессиями в WordPress. Она полезна для обеспечения дополнительного уровня безопасности, предотвращая одновременный вход с нескольких устройств. Ее легко интегрировать в плагины и темы для управления сессиями пользователей и контроля доступа к ресурсу.