记住密码 php实现
实现记住密码功能的方法
在PHP中实现记住密码功能通常通过Cookie或Session结合数据库验证完成。以下是两种常见实现方式:
基于Cookie的实现
设置长期有效的Cookie存储用户登录凭证:

$username = 'user123';
$token = bin2hex(random_bytes(32)); // 生成唯一令牌
setcookie('remember_user', $username, time() + (86400 * 30), "/"); // 30天有效期
setcookie('remember_token', $token, time() + (86400 * 30), "/");
// 同时将令牌存入数据库
$hashedToken = password_hash($token, PASSWORD_DEFAULT);
$stmt = $pdo->prepare("UPDATE users SET remember_token = ? WHERE username = ?");
$stmt->execute([$hashedToken, $username]);
验证Cookie时的处理:
if(isset($_COOKIE['remember_user']) && isset($_COOKIE['remember_token'])){
$username = $_COOKIE['remember_user'];
$token = $_COOKIE['remember_token'];
$stmt = $pdo->prepare("SELECT remember_token FROM users WHERE username = ?");
$stmt->execute([$username]);
$user = $stmt->fetch();
if($user && password_verify($token, $user['remember_token'])){
$_SESSION['loggedin'] = true;
$_SESSION['username'] = $username;
}
}
基于Session的实现

延长Session有效期(需配合服务器配置):
ini_set('session.gc_maxlifetime', 86400 * 30); // 30天
session_set_cookie_params(86400 * 30);
session_start();
// 登录成功后设置Session
$_SESSION['loggedin'] = true;
$_SESSION['username'] = 'user123';
$_SESSION['LAST_ACTIVITY'] = time(); // 更新最后活动时间
安全注意事项
- 始终使用HTTPS传输Cookie
- 敏感信息不应直接存储在Cookie中
- 定期更换令牌(如每次登录生成新令牌)
- 提供注销功能清除Cookie和Session
- 实现CSRF保护机制
数据库设计建议
用户表应包含以下字段:
ALTER TABLE users ADD COLUMN remember_token VARCHAR(255);
ALTER TABLE users ADD COLUMN token_expiry DATETIME;
令牌验证逻辑应同时检查过期时间:
$stmt = $pdo->prepare("SELECT remember_token, token_expiry FROM users WHERE username = ?");
$stmt->execute([$username]);
$user = $stmt->fetch();
if($user && password_verify($token, $user['remember_token']) && strtotime($user['token_expiry']) > time()){
// 验证通过
}






