




在php网站中,只要确保`$_session['user']`仅在用户成功登录后才被设置,后续页面只需检查该session变量是否存在即可;但为增强安全性,建议结合数据库中的认证token进行二次校验,并实施token轮换与过期机制。
在构建基于Session的身份验证系统时,核心原则是:Session是服务端状态,可信度高;而客户端Cookie(包括Session ID和自定义认证Cookie)本质上不可信,需谨慎对待。
✅ 推荐做法:
// 示例:通用登录状态验证逻辑(建议封装为函数) function requireAuth() { if (!isset($_SESSION['user']) || !isset($_COOKIE['auth_token'])) { header('Location: /login.php'); exit; } $userId = (int)$_SESSION['user']; $token = $_COOKIE['auth_token']; // 数据库校验:Token是否有效、未过期、归属当前用户 $stmt = $pdo->prepare( "SELECT 1 FROM auth_tokens WHERE user_id = ? AND token = ? AND expires_at > NOW() AND is_revoked = 0" ); $stmt->execute([$userId, $token]); if (!$stmt->fetch()) { // 失效处理:清除本地Session和Cookie $_SESSION = []; session_destroy(); setcookie('auth_token', '', time() - 3600, '/', '', true, true); header('Location: /login.php?error=invalid_session'); exit; } }
⚠️ 关键注意事项:
综上,isset($_SESSION['user']) 是快速可用的初步判断,但生产环境必须辅以服务端Token校验——这不是过度设计,而是现代Web安全的基本实践。