当前位置:首页 > PHP

php实现记住

2026-02-14 20:17:15PHP

PHP 实现记住登录功能

使用 Cookie 和 Session 结合的方式可以实现记住登录功能。以下是具体实现方法:

php实现记住

设置 Cookie 和 Session

在用户登录成功后,生成一个唯一的 token 并存入数据库,同时设置 Cookie 和 Session:

php实现记住

// 用户登录验证成功后
if ($login_success) {
    // 生成唯一 token
    $token = bin2hex(random_bytes(32));

    // 存储 token 到数据库
    $expires = time() + 86400 * 30; // 30 天后过期
    $sql = "INSERT INTO user_tokens (user_id, token, expires) VALUES (?, ?, ?)";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$user_id, $token, $expires]);

    // 设置 Cookie
    setcookie('remember_token', $token, $expires, '/');

    // 设置 Session
    $_SESSION['user_id'] = $user_id;
}

自动登录验证

在每次页面加载时检查是否存在 remember_token Cookie,并验证 token 是否有效:

// 检查 Session 是否已登录
if (!isset($_SESSION['user_id']) && isset($_COOKIE['remember_token'])) {
    $token = $_COOKIE['remember_token'];

    // 查询数据库验证 token
    $sql = "SELECT user_id FROM user_tokens WHERE token = ? AND expires > ?";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$token, time()]);
    $row = $stmt->fetch();

    if ($row) {
        // token 有效,设置 Session
        $_SESSION['user_id'] = $row['user_id'];

        // 可选:更新 token 过期时间
        $new_expires = time() + 86400 * 30;
        $sql = "UPDATE user_tokens SET expires = ? WHERE token = ?";
        $stmt = $pdo->prepare($sql);
        $stmt->execute([$new_expires, $token]);

        setcookie('remember_token', $token, $new_expires, '/');
    }
}

注销处理

用户注销时需要清除 Session 和 Cookie:

// 注销操作
session_destroy();

// 清除 remember_token
if (isset($_COOKIE['remember_token'])) {
    // 从数据库删除 token
    $sql = "DELETE FROM user_tokens WHERE token = ?";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$_COOKIE['remember_token']]);

    // 清除 Cookie
    setcookie('remember_token', '', time() - 3600, '/');
}

安全注意事项

  1. 使用 HTTPS 协议传输 Cookie
  2. 设置 Cookie 的 HttpOnly 和 Secure 属性
  3. 定期清理过期的 token
  4. 对 token 使用足够的熵值(长度)
// 更安全的 Cookie 设置
setcookie(
    'remember_token',
    $token,
    [
        'expires' => $expires,
        'path' => '/',
        'domain' => 'yourdomain.com',
        'secure' => true,
        'httponly' => true,
        'samesite' => 'Strict'
    ]
);

这种方法结合了 Session 和 Cookie 的优点,既保证了安全性又实现了记住登录功能。Session 用于短期验证,Cookie 用于长期记住用户。

标签: php
分享给朋友:

相关文章

php 实现购物车

php 实现购物车

PHP 实现购物车功能 购物车功能是电子商务网站的核心部分,可以通过 PHP 和 Session 或数据库来实现。以下是两种常见的实现方式: 使用 Session 存储购物车数据 Session…

php实现聊天

php实现聊天

实现 PHP 聊天功能的方法 使用 WebSocket 和 PHP 实现实时聊天 WebSocket 是一种全双工通信协议,适合实现实时聊天功能。PHP 可以通过 Ratchet 库实现 WebSo…

php实现一个

php实现一个

PHP 实现一个简单的计算器 创建一个基本的计算器,支持加、减、乘、除运算。以下是一个完整的实现代码示例: <?php $result = ""; if ($_SERVER["REQUEST…

php 函数实现

php 函数实现

PHP 函数实现基础 PHP 函数的定义使用 function 关键字,后跟函数名和参数列表。函数名不区分大小写,但建议保持一致。 function functionName($param1, $…

php实现登陆

php实现登陆

PHP 实现登录功能 创建登录表单 在 HTML 文件中创建一个登录表单,包含用户名和密码输入框,表单的 action 属性指向处理登录的 PHP 文件。 <form action="log…

php实现mvc

php实现mvc

PHP 实现 MVC 架构 MVC(Model-View-Controller)是一种常用的软件设计模式,将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller…