当前位置:首页 > PHP

php实现记住登录

2026-02-16 20:11:06PHP

PHP实现记住登录功能

使用Cookie存储登录凭证

在用户登录成功后,生成一个唯一的token,将其存储在数据库中,并设置一个长期有效的cookie。当用户再次访问时,检查cookie中的token是否有效。

// 用户登录成功后生成token
$token = bin2hex(random_bytes(32));
$expire = time() + 60 * 60 * 24 * 30; // 30天有效期

// 存储token到数据库
$stmt = $pdo->prepare("INSERT INTO remember_tokens (user_id, token, expires_at) VALUES (?, ?, ?)");
$stmt->execute([$user_id, $token, date('Y-m-d H:i:s', $expire)]);

// 设置cookie
setcookie('remember_token', $token, $expire, '/', '', true, true);

验证记住登录状态

每次页面加载时检查是否存在remember_token cookie,并验证其有效性。

php实现记住登录

if (isset($_COOKIE['remember_token'])) {
    $token = $_COOKIE['remember_token'];

    $stmt = $pdo->prepare("SELECT user_id FROM remember_tokens WHERE token = ? AND expires_at > NOW()");
    $stmt->execute([$token]);
    $row = $stmt->fetch();

    if ($row) {
        // 登录用户
        $_SESSION['user_id'] = $row['user_id'];
    } else {
        // 无效token,删除cookie
        setcookie('remember_token', '', time() - 3600, '/');
    }
}

安全注意事项

  1. 使用HTTPS确保cookie传输安全
  2. 设置cookie的HttpOnly和Secure标志
  3. 定期清理过期的token
  4. 允许用户主动注销时删除token
// 用户注销时删除token
if (isset($_COOKIE['remember_token'])) {
    $token = $_COOKIE['remember_token'];
    $pdo->prepare("DELETE FROM remember_tokens WHERE token = ?")->execute([$token]);
    setcookie('remember_token', '', time() - 3600, '/');
}

数据库表结构示例

CREATE TABLE remember_tokens (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    token VARCHAR(64) NOT NULL,
    expires_at DATETIME NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

标签: php
分享给朋友:

相关文章

php实现增删改查

php实现增删改查

以下是在PHP中实现增删改查(CRUD)操作的详细方法,以MySQL数据库为例: 数据库连接配置 创建config.php文件存储数据库连接信息: <?php $host = 'localh…

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_shi…

php长连接实现

php长连接实现

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

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 <…

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searchT…