
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);
文章版权归作者所有,未经允许请勿转载。
















暂无评论内容