PHP实现Token认证的最佳实践
2026-03-08
Token认证是一种用于身份验证的机制,允许用户在登录后获得一个唯一的令牌(Token),然后使用这个令牌进行后续的请求。这个令牌通常是一个加密字符串,包含用户的身份信息和其他相关的元数据,如有效期等。与传统的会话式认证不同,Token认证不需要在服务器上保存用户的状态,每次请求都会附带Token,使得用户数据的隔离和保护更加有效。
Token认证的工作流程通常如下:
接下来,我们将逐步介绍如何在PHP中实现Token认证。下面是主要的步骤和代码示例:
首先,我们需要设计用户的数据表。一个典型的用户表可能包含以下字段:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
在实际应用中,密码应该使用安全的哈希算法存储,例如bcrypt。此外,我们需要一个存储Token的地方,可以在用户表中添加一个字段存储Token,或者在单独的Token表中存放它们。
在用户注册时,我们需要确保用户提供的用户名是唯一的,并将密码经过哈希处理后存储在数据库中。以下是一个简单的注册功能示例:
function register($username, $password) {
// 数据库连接
$conn = new PDO('mysql:host=localhost;dbname=test', 'root', 'password');
// 检查用户名是否存在
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);
if ($stmt->rowCount() > 0) {
return "用户已存在";
}
// 哈希密码并插入数据库
$hashedPassword = password_hash($password, PASSWORD_BCRYPT);
$stmt = $conn->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
$stmt->execute([$username, $hashedPassword]);
return "注册成功";
}
在用户登录时,我们需要验证其凭证。如果验证成功,则生成一个Token并返回给用户。以下是一个简单的登录功能示例:
function login($username, $password) {
// 数据库连接
$conn = new PDO('mysql:host=localhost;dbname=test', 'root', 'password');
// 获取用户数据
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);
$user = $stmt->fetch();
if ($user