🗣 Wd提问: php token验证
🤖 Ai回答: 在 PHP 中实现 Token 验证通常用于身份验证(Authentication)和授权(Authorization),尤其是在构建 RESTful API 时。最常见的方式是使用 JWT(JSON Web Token) 或自定义的 Session/Token 机制。
下面我将分别介绍两种常见的 PHP Token 验证方式:
✅ 方式一:使用 JWT(推荐)
1、安装 JWT 库(使用 Composer)
bash
composer require firebase/php-jwt
2、生成 Token(登录时)
php
<?php
require 'vendor/autoload.php';
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
$secret_key = your_secret_key_here; // 必须保密!建议放在环境变量中
$payload = [
'iss' = 'your_app_name', // 签发者
'aud' = 'your_app_audience', // 接收方
'iat' = time(), // 签发时间
'exp' = time() + 3600, // 过期时间(1小时)
'user_id' = 123, // 用户ID等自定义数据
];
$jwt = JWT::encode($payload, $secret_key, 'HS256');
echo Token: 、$jwt;
3、验证 Token(每次请求时)
php
<?php
require 'vendor/autoload.php';
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
$secret_key = your_secret_key_here;
$token = $_SERVER['HTTP_AUTHORIZATION'] ?? '';
// 如果 Authorization 头是 Bearer xxx 的格式
if (strpos($token, 'Bearer ') === 0) {
$token = substr($token, 7);
}
try {
$decoded = JWT::decode($token, new Key($secret_key, 'HS256'));
// 验证成功,可以访问 $decoded-user_id 等数据
echo User ID: 、$decoded-user_id;
} catch (Exception $e) {
http_response_code(401);
echo json_encode(['error' = 'Invalid or expired token']);
exit;
}
⚠️ 注意:
`$secret_key` 必须保密,不要硬编码在代码中,建议使用 `.env` 文件。
使用 HTTPS 防止 Token 被窃听。
设置合理的过期时间(`exp`)。
✅ 方式二:自定义 Token(基于数据库)
适用于不想用 JWT、需要随时吊销 Token 的场景。
1、登录时生成唯一 Token 并存入数据库
php
// 登录成功后
$user_id = 123;
$token = bin2hex(random_bytes(32)); // 生成安全随机字符串
// 存入数据库(例如 tokens 表)
// INSERT INTO tokens (user_id, token, expires_at) VALUES (123, 'abc123...', NOW() + INTERVAL 1 HOUR)
2、验证 Token
php
$token = $_SERVER['HTTP_AUTHORIZATION'] ?? '';
if (strpos($token, 'Bearer ') === 0) {
$token = substr($token, 7);
}
// 查询数据库
$stmt = $pdo-prepare(SELECT user_id FROM tokens WHERE token = ? AND expires_at NOW());
$stmt-execute([$token]);
if ($row = $stmt-fetch()) {
$user_id = $row['user_id'];
// 验证通过
} else {
http_response_code(401);
echo Invalid token;
exit;
}
✅ 优点:可随时删除 Token 实现“退出登录”或“踢下线”。
❌ 缺点:每次都要查数据库,性能略低。
🛡️ 安全建议
1、始终使用 HTTPS
2、Token 不要存入 Cookie(除非设置 HttpOnly + Secure)
3、设置合理的过期时间
4、敏感操作(如修改密码)要求重新验证
5、防止重放攻击(可加入 jti 唯一标识)
🧪 测试示例(Postman)
请求头添加:
Authorization: Bearer <your_token_here
如果你有具体需求(比如用 Laravel、ThinkPHP,或者需要刷新 Token 机制),可以告诉我,我会提供更针对性的代码。
📣 商家广告:





0
IP地址: 65.126.186.41
搜索次数: 0
提问时间: 2025-11-11 04:08:59
🛒 域名购买:
ltkj.net
chasou.com.cn
jjxs.cn
61.gold
dxgm.cn
toutian.com.cn
32.gs
lw.gs
sou.gg
0.bj.cn
❓️ 热门提问:
vps编辑
机柜立柱
云服务器免费体验30天
黑龙江ip代理
服务器机箱机柜
网站优化岗位
互联网域名注册收费标准
PHP源码微信门店
VPS服务器使用指南
idc机房走线架
豌豆Ai站群搜索引擎系统
🌐 域名评估:
trump.hk.cn
xphone.games
hswp.cn
ll.hk.cn
ocdl.cn
25.gs
fsgx.cn
pjig.cn
vtol.run
vwb.cn
⛏ 最新挖掘:
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜
🖌 热门作画:
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊:
🔗 友情链接:
股票搜索
上市公司搜索
ai提问
🧰 站长工具:
Ai工具 whois查询 搜索
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。