php实现记住密码
PHP实现记住密码功能
使用PHP实现记住密码功能通常涉及以下几个关键步骤:
设置Cookie存储登录凭证
在用户登录成功时生成一个唯一的token,并将其存储在数据库和用户浏览器的cookie中。确保token具有足够的安全性:
$token = bin2hex(random_bytes(32));
setcookie('remember_token', $token, time() + 86400 * 30, '/', '', true, true);
数据库存储token
在用户表中添加字段存储token和过期时间:

ALTER TABLE users ADD remember_token VARCHAR(64) NULL;
ALTER TABLE users ADD remember_expires DATETIME NULL;
验证记住我功能
当用户访问网站时检查是否存在remember_token cookie:
if (!isset($_SESSION['user_id']) && isset($_COOKIE['remember_token'])) {
$token = $_COOKIE['remember_token'];
// 查询数据库验证token有效性
$stmt = $pdo->prepare("SELECT id FROM users WHERE remember_token = ? AND remember_expires > NOW()");
$stmt->execute([$token]);
$user = $stmt->fetch();
if ($user) {
$_SESSION['user_id'] = $user['id'];
// 可选:更新token延长有效期
}
}
安全注意事项

- 使用HttpOnly和Secure标志设置cookie
- 定期更换token
- 提供注销功能清除服务器端和客户端的token
- 对敏感操作仍需密码验证
完整示例代码
登录处理部分:
if ($login_success) {
$_SESSION['user_id'] = $user['id'];
if (isset($_POST['remember_me'])) {
$token = bin2hex(random_bytes(32));
$expires = date('Y-m-d H:i:s', time() + 86400 * 30);
$stmt = $pdo->prepare("UPDATE users SET remember_token = ?, remember_expires = ? WHERE id = ?");
$stmt->execute([$token, $expires, $user['id']]);
setcookie('remember_token', $token, time() + 86400 * 30, '/', '', true, true);
}
}
最佳实践
- 考虑使用更安全的JWT代替简单token
- 实现多因素认证提升安全性
- 记录登录设备信息
- 提供用户查看和管理活跃会话的功能
这种方法实现了基本的记住密码功能,同时兼顾了安全性需求。根据具体应用场景,可能需要调整实现细节。






