PHP防止重复登录主要是为了确保同一用户在多个设备上不会同时登录,从而保护用户的账户安全。这通常通过会话管理、令牌验证等方式实现。
session_start();
if (isset($_SESSION['user_id'])) {
// 用户已登录,处理重复登录逻辑
echo "您已经在其他设备上登录,请先退出。";
exit;
}
// 用户登录逻辑
$_SESSION['user_id'] = $user_id;// 生成JWT令牌
$token = [
'user_id' => $user_id,
'exp' => time() + 3600 // 过期时间
];
$jwt = JWT::encode($token, 'secret_key');
// 验证JWT令牌
try {
$decoded = JWT::decode($jwt, 'secret_key', ['HS256']);
if (isset($decoded->user_id)) {
// 用户已登录,处理重复登录逻辑
echo "您已经在其他设备上登录,请先退出。";
exit;
}
} catch (Exception $e) {
// 令牌验证失败
echo "无效的令牌。";
exit;
}
// 用户登录逻辑// 检查数据库中是否已有该用户的登录记录
$sql = "SELECT * FROM user_login WHERE user_id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$user_id]);
$login_record = $stmt->fetch();
if ($login_record) {
// 用户已登录,处理重复登录逻辑
echo "您已经在其他设备上登录,请先退出。";
exit;
}
// 记录用户登录状态
$sql = "INSERT INTO user_login (user_id, login_time) VALUES (?, ?)";
$stmt = $pdo->prepare($sql);
$stmt->execute([$user_id, time()]);
// 用户登录逻辑原因:用户在多个设备上同时登录,导致会话冲突。
解决方法:
原因:令牌可能被篡改或伪造。
解决方法:
通过以上方法,可以有效防止PHP应用中的重复登录问题,提升系统的安全性和用户体验。
没有搜到相关的沙龙