密钥过期通过比对当前时间与exp字段判断:exp必须为Unix时间戳整数,PHP用time()校验,需确保其存在、为数字且服务端时间准确;Redis中建议用SETEX自动过期。
密钥过期怎么判断:看 exp 字段是否已过时
JWT 或自定义 token 中的密钥(或 token 本身)是否过期,核心就一条:比对当前时间与 exp(expiration time)字段。PHP 里直接用 time() 就行,别用 date('U') 或 strtotime('now') —— 它们本质一样但多一层函数调用,没优势还可能因时区出错。
关键点:
-
exp必须是 Unix 时间戳(整数),不是字符串格式的日期 - 务必校验
exp是否存在且为数字,否则未设过期时间的 token 可能被误判为“已过期” - 服务端时间必须准确,NTP 同步建议开启;若用 Docker 容器,注意宿主机与容器时钟偏差
PHP 实现密钥失效检查:三步完成验证
不依赖第三方库也能安全验证。以一个简单 JWT payload 为例:
$payload = json_decode(base64_decode($parts[1]), true);
if (!isset($payload['exp']) || !is_numeric($payload['exp'])) {
throw new Exception('Missing or invalid exp claim');
}
if ($payload['exp'] < time()) {
throw new Exception('Token expired');
}
注意:
立即学习“PHP免费学习笔记(深入)”;