token php实现
Token 在 PHP 中的实现方法
生成 Token
使用 random_bytes 或 openssl_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:

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






