当前位置:首页 > PHP

记住密码 php实现

2026-01-30 06:14:33PHP

实现记住密码功能的方法

在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;

令牌验证逻辑应同时检查过期时间:

记住密码 php实现

$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()){
    // 验证通过
}

标签: 密码php
分享给朋友:

相关文章

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HTTP…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php实现下载

php实现下载

PHP实现文件下载 使用PHP实现文件下载可以通过设置HTTP头部信息强制浏览器下载文件而非直接打开。以下是几种常见的方法: 方法一:直接输出文件内容 $file_path = 'path/to/…

php 实现类

php 实现类

PHP 类的基本实现 在 PHP 中,类通过 class 关键字定义,后跟类名和一对花括号。类名通常遵循大驼峰命名法(如 ClassName)。以下是基本语法: class ClassName {…

php实现定时

php实现定时

PHP 实现定时任务的方法 PHP 本身是脚本语言,通常需要借助外部工具或框架实现定时任务。以下是几种常见方法: 使用 Cron 任务 Linux 系统自带的 Cron 是常用的定时任务工具。通过编…

php实现伪静态

php实现伪静态

PHP 实现伪静态的方法 伪静态(URL Rewrite)是一种将动态URL转换为看似静态URL的技术,提升SEO友好性和用户体验。以下是几种常见的实现方式: 使用 Apache 的 mod_rew…