You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WP_Session_Tokens::destroy() 问题:调用无效果,如何删除指定会话?

WordPress 如何正确销毁指定会话

你之前的代码无效,是因为WP_Session_Tokens::destroy()方法的参数不是数组索引(比如0),而是会话对应的token字符串。直接传0会因为找不到匹配的token而执行失败。

一、获取指定会话的token并销毁

要删除指定会话,首先需要获取该会话对应的token。可以通过get_all()方法获取当前用户的所有会话数据,这个方法返回的数组中,键就是会话token,值是包含会话详情(如登录时间、用户代理、过期时间)的数组。

示例1:删除第一个会话(对应你想删的"索引0"会话)

$user_id = get_current_user_id();
$manager = WP_Session_Tokens::get_instance($user_id);
$all_sessions = $manager->get_all();

if (!empty($all_sessions)) {
    // 获取第一个会话的token(PHP 7.3+ 可用array_key_first)
    $target_token = array_key_first($all_sessions);
    // 兼容PHP 7.2及以下版本的写法:
    // reset($all_sessions);
    // $target_token = key($all_sessions);
    
    // 销毁该会话
    $manager->destroy($target_token);
}

示例2:根据会话特征删除指定会话

如果需要根据会话的具体信息(比如用户代理、登录时间)删除,可以遍历会话数组匹配目标:

$user_id = get_current_user_id();
$manager = WP_Session_Tokens::get_instance($user_id);
$all_sessions = $manager->get_all();

// 比如删除匹配特定用户代理的会话
$target_user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36';

foreach ($all_sessions as $token => $session_data) {
    // 会话数据中的`ua`字段存储了用户代理信息
    if (strpos($session_data['ua'], $target_user_agent) !== false) {
        $manager->destroy($token);
        break; // 找到匹配项后停止遍历,如需删除所有匹配项可去掉此句
    }
}

二、额外补充:销毁当前会话

如果你的需求是销毁当前用户正在使用的会话,可以直接使用destroy_current()方法,无需手动获取token:

$user_id = get_current_user_id();
$manager = WP_Session_Tokens::get_instance($user_id);
$manager->destroy_current();

内容的提问来源于stack exchange,提问作者Amir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 01:02:10