WordPress子比主题有效防止盗号和一号多用

WordPress子比主题有效防止盗号和一号多用

functions.php代码

/**
 * 检查用户会话
 */
function zyx_user_sessions()
{
    $username = $_POST['username'];
    $password = $_POST['password'];
    
    $user = wp_authenticate($username, $password);
    // 获取当前用户的ID和邮箱
    $user_id = $user->ID;

    // 获取当前用户的登录会话信息
    $sessions = WP_Session_Tokens::get_instance($user_id);
    $active_sessions = $sessions->get_all();

    // 检查是否有其他活动的会话
    $other_active_session = false;
    foreach ($active_sessions as $session_token => $session_data) 
    {
        if ($session_data['ip'] !== $_SERVER['REMOTE_ADDR'] || $session_data['ua'] !== $_SERVER['HTTP_USER_AGENT']) 
        {
            $other_active_session = true;
            break;
        }
    }

    // 如果存在其他活动的会话
    if ($other_active_session) 
    {
        // 返回错误消息
        $response = array(
            'error' => 1,
            'msg' => '您的账户已在其他地方登录,请使用邮箱免密登录或快捷登录'
        );
        wp_send_json($response);
        wp_logout();
        exit;
    }
}
add_action('wp_ajax_user_signin', 'zyx_user_sessions');
add_action('wp_ajax_nopriv_user_signin', 'zyx_user_sessions');

/**
 * 清除用户其他会话,并发送邮箱
 */
function zyx_user_log_out($user) 
{
    if (is_object($user)) {
        // 获取当前用户的ID
        $user_id = $user->ID;
        // 获取当前用户的邮箱
        $user_email = $user->user_email;
    } else {
        // 获取当前用户的ID
        $user_id = get_current_user_id();
        // 获取当前用户的邮箱
        $user_email = get_userdata($user_id)->user_email;
    }
    $user_ip = $_SERVER['REMOTE_ADDR'];
    $user_login_time = date('Y-m-d H:i:s');
    // 清除用户的其他会话
    wp_destroy_other_sessions($user_id);
    
    $blog_title   = get_bloginfo('name');
    //发送信息
    $msgtitle = '[' . $blog_title . '] 账号登录提醒';

    // 构建提醒邮件内容
    $message = "请注意,您的账号在IP地址 {$user_ip} 上已经登录。<br>";
    $message = '登录时间:' . $user_login_time . "<br>";
    $message .= "如果这不是您本人的操作,请立即联系我们的站长,说明情况。这可以防止您的账号被盗用。<br>";
    
    @wp_mail($user_email, $msgtitle, $message);
}
add_action('wp_login', 'zyx_user_log_out', 10, 2);

 



喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容