当前位置:首页 > PHP

token php实现

2026-03-13 00:27:33PHP

Token 在 PHP 中的实现方法

生成 Token

使用 random_bytesopenssl_random_pseudo_bytes 生成安全的随机字符串作为 Token:

$token = bin2hex(random_bytes(32));
// 或者
$token = bin2hex(openssl_random_pseudo_bytes(32));

存储 Token

将生成的 Token 存储到数据库或会话中,用于后续验证:

// 存储到数据库示例
$stmt = $pdo->prepare("INSERT INTO user_tokens (user_id, token, expires_at) VALUES (?, ?, ?)");
$stmt->execute([$userId, $token, date('Y-m-d H:i:s', strtotime('+1 hour'))]);

// 存储到 Session
$_SESSION['csrf_token'] = $token;

验证 Token

在需要验证 Token 的地方,从请求中获取 Token 并与存储的 Token 比对:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $requestToken = $_POST['token'] ?? '';
    $storedToken = $_SESSION['csrf_token'] ?? '';

    if (!hash_equals($storedToken, $requestToken)) {
        die('Invalid token');
    }
}

JWT Token 实现

使用 firebase/php-jwt 库生成和验证 JWT Token:

token php实现

require 'vendor/autoload.php';
use \Firebase\JWT\JWT;

// 生成 JWT Token
$key = "your_secret_key";
$payload = [
    "iss" => "your_issuer",
    "aud" => "your_audience",
    "iat" => time(),
    "exp" => time() + 3600,
    "data" => ["user_id" => 123]
];
$jwt = JWT::encode($payload, $key);

// 验证 JWT Token
try {
    $decoded = JWT::decode($jwt, $key, ['HS256']);
    print_r($decoded);
} catch (Exception $e) {
    echo 'Invalid token: ', $e->getMessage();
}

安全注意事项

  • 使用 hash_equals 比较 Token 以避免时序攻击
  • 设置合理的 Token 过期时间
  • 对敏感操作要求重新生成 Token
  • 使用 HTTPS 传输 Token

标签: tokenphp
分享给朋友:

相关文章

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 //…

php实现分类

php实现分类

PHP实现分类的方法 数据库设计 创建分类表时,通常需要包含id、名称、父级id等字段。父级id用于实现多级分类结构。 CREATE TABLE categories ( id INT AU…

php实现上传图片

php实现上传图片

上传图片的基本流程 PHP 实现图片上传功能需要处理文件接收、验证、保存等步骤。以下是具体实现方法。 创建 HTML 表单 在 HTML 中创建一个表单,设置 enctype="multipart/…

php实现的分页

php实现的分页

PHP 实现分页的方法 基本分页逻辑 分页的核心在于计算总页数、当前页码以及数据偏移量。假设每页显示 10 条数据: $current_page = isset($_GET['page']) ? (…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php实现的进度条

php实现的进度条

PHP 实现的进度条方法 在 PHP 中实现进度条通常可以通过命令行脚本(CLI)或 Web 页面两种方式完成。以下是几种常见的实现方法: 命令行进度条 使用 PHP CLI 实现进度条,可以通过不…