php实现记住
实现记住登录功能的方法
在PHP中实现记住登录功能通常涉及生成持久化的认证令牌(如Cookie),并结合数据库存储验证信息。以下是具体实现方式:
生成持久化Cookie
用户登录成功时,生成一个唯一令牌并存入Cookie,设置较长有效期(如30天):
$token = bin2hex(random_bytes(32));
setcookie('remember_token', $token, time() + 60 * 60 * 24 * 30, '/', '', true, true);
数据库存储令牌
在用户表中添加字段存储令牌和过期时间:

ALTER TABLE users ADD remember_token VARCHAR(64) NULL;
ALTER TABLE users ADD remember_expires DATETIME NULL;
登录成功后更新数据库:
$expires = date('Y-m-d H:i:s', time() + 60 * 60 * 24 * 30);
$stmt = $pdo->prepare("UPDATE users SET remember_token=?, remember_expires=? WHERE id=?");
$stmt->execute([$token, $expires, $user_id]);
自动登录验证
每次页面加载时检查是否存在记住我Cookie:

if (!isset($_SESSION['user_id']) && isset($_COOKIE['remember_token'])) {
$stmt = $pdo->prepare("SELECT id FROM users WHERE remember_token=? AND remember_expires > NOW()");
$stmt->execute([$_COOKIE['remember_token']]);
$user = $stmt->fetch();
if ($user) {
$_SESSION['user_id'] = $user['id'];
} else {
setcookie('remember_token', '', time() - 3600, '/');
}
}
安全增强措施
为提升安全性,建议采取以下额外措施:
- 结合用户浏览器信息生成令牌
- 每次成功验证后更新令牌
- 实现令牌过期机制
- 记录登录日志监控异常行为
用户登出处理
用户主动退出时清除相关凭证:
setcookie('remember_token', '', time() - 3600, '/');
$stmt = $pdo->prepare("UPDATE users SET remember_token=NULL, remember_expires=NULL WHERE id=?");
$stmt->execute([$_SESSION['user_id']]);
session_destroy();
这种方法实现了安全的持久化登录功能,同时通过定期更新令牌和严格的验证机制保障了系统安全。






