token php实现
Token 在 PHP 中的实现方法
生成 Token
使用 bin2hex 和 random_bytes 生成安全的随机 Token:
$token = bin2hex(random_bytes(32));
存储 Token
将 Token 存储在数据库或会话中:
// 存储到会话
$_SESSION['csrf_token'] = $token;
// 存储到数据库(示例使用 PDO)
$stmt = $pdo->prepare("INSERT INTO user_tokens (user_id, token) VALUES (?, ?)");
$stmt->execute([$user_id, $token]);
验证 Token
比较提交的 Token 与存储的 Token:
if (!empty($_POST['token']) && hash_equals($_SESSION['csrf_token'], $_POST['token'])) {
// Token 验证通过
} else {
// Token 验证失败
}
JWT Token 实现
使用 firebase/php-jwt 库生成和验证 JWT Token:
require 'vendor/autoload.php';
use \Firebase\JWT\JWT;
// 生成 JWT
$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
try {
$decoded = JWT::decode($jwt, $key, ['HS256']);
$user_id = $decoded->data->user_id;
} catch (Exception $e) {
// 处理验证失败
}
Token 过期处理
设置 Token 过期时间并验证:
// 存储时添加过期时间
$_SESSION['token_expire'] = time() + 1800; // 30分钟后过期
// 验证时检查过期
if (time() > $_SESSION['token_expire']) {
// Token 已过期
}
安全注意事项
- 始终使用 HTTPS 传输 Token
- 使用
hash_equals进行字符串比较防止时序攻击 - 定期轮换加密密钥
- 敏感操作应使用一次性 Token
这些方法涵盖了 PHP 中 Token 的生成、存储、验证和安全处理的基本实现方式。







