php的token管理类(AI生成)

news/2025/1/15 16:30:13/文章来源:https://www.cnblogs.com/cblx/p/18673328

当然,以下是一个简单的 PHP 类,用于生成和管理令牌(token)。这个类可以生成一个随机的令牌、验证令牌是否有效,并允许设置一个令牌的过期时间。

<?phpclass Token
{private $secretKey;private $token;private $expiration;/*** Token constructor.* @param string $secretKey 用于生成和验证令牌的密钥*/public function __construct($secretKey){$this->secretKey = $secretKey;}/*** 生成一个新的令牌* @param int $expirationTime 令牌的有效期(秒)* @return string 生成的令牌*/public function generateToken($expirationTime = 3600){$data = ['iat' => time(), // 令牌生成时间'exp' => time() + $expirationTime // 令牌过期时间
        ];$jwt = $this->encode($data);$this->token = $jwt;$this->expiration = time() + $expirationTime;return $jwt;}/*** 验证令牌是否有效* @param string $token 要验证的令牌* @return bool 是否有效*/public function validateToken($token){$decoded = $this->decode($token);if (!$decoded || $decoded->exp < time()) {return false;}return true;}/*** 编码数据为 JWT* @param array $data 要编码的数据* @return string 编码后的 JWT*/private function encode($data){$header = base64_encode(json_encode(['typ' => 'JWT', 'alg' => 'HS256']));$payload = base64_encode(json_encode($data));$signature = hash_hmac('sha256', "$header.$payload", $this->secretKey, true);$signature = base64_encode($signature);return "$header.$payload.$signature";}/*** 解码 JWT* @param string $jwt 要解码的 JWT* @return stdClass|null 解码后的数据或 null*/private function decode($jwt){$parts = explode('.', $jwt);if (count($parts) !== 3) {return null;}list($header, $payload, $signature) = $parts;$decodedSignature = base64_decode($signature);$data = "$header.$payload";$calculatedSignature = hash_hmac('sha256', $data, $this->secretKey, true);if (hash_equals($decodedSignature, $calculatedSignature)) {return json_decode($base64_decode($payload));}return null;}/*** 获取当前令牌的过期时间* @return int|null 过期时间戳或 null(如果没有令牌)*/public function getExpiration(){return $this->expiration;}/*** 获取当前令牌* @return string|null 当前令牌或 null(如果没有令牌)*/public function getToken(){return $this->token;}
}// 使用示例
$secretKey = 'your-secret-key';
$token = new Token($secretKey);// 生成一个有效期为1小时的令牌
$newToken = $token->generateToken(3600);
echo "Generated Token: " . $newToken . PHP_EOL;// 验证令牌是否有效
$isValid = $token->validateToken($newToken);
echo "Is Token Valid: " . ($isValid ? 'Yes' : 'No') . PHP_EOL;// 获取令牌过期时间
$expiration = $token->getExpiration();
echo "Token Expiration: " . date('Y-m-d H:i:s', $expiration) . PHP_EOL;

解释

  1. 构造函数:接受一个 secretKey 用于生成和验证令牌。
  2. 生成令牌:generateToken 方法生成一个新的 JWT 令牌,并设置其过期时间。
  3. 验证令牌:validateToken 方法验证给定的令牌是否有效。
  4. 编码和解码:encode 和 decode 方法用于 JWT 的编码和解码。
  5. 获取过期时间和令牌:提供 getExpiration 和 getToken 方法来获取当前令牌的过期时间和令牌本身。

这个类使用 JWT(JSON Web Token)标准来生成和验证令牌。你可以根据具体需求进行扩展和修改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/869675.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024,语音 AI 元年;2025,Voice Agent 即将爆发丨年度报告发布

围绕 Voice Agent 产品的研发、商业化和增长的完整生命周期,报告构建出一份 Voice Agent 产业生态全景图。 2024 年,AI 与实时互动技术的结合 达到了前所未有的高度。5 月, OpenAI 发布了 GPT-4o ,并展示了其对话功能,仿佛电影《HER》中的智能助手走入了现实生活。10 月,…

基恩士SR710+N-L20系列扫码枪EIP通讯 ( 汇川AM401-基恩士N-L20 )

第一步: 扫码枪设置 1, 基恩士扫码枪IP地址设置 2, 扫码枪EIP设置第二步: PLC设置及编程 1,EDS文件导入 2, EIP配置

预告:钓鱼系统

用于钓鱼演练的钓鱼系统钓鱼系统 数据统计 首页有数据统计,统计了各个模块的数据网页钓鱼 内置了一个钓鱼登录框可以查看被钓中的目标已经钓鱼页面浏览量,密码需要在服务器日志查看exe钓鱼 分为两个,一个是下载一个是运行 模拟的木马无实际危害,仅仅获取用户信息回传,可以…

git工作流区域

一、主要区域工作目录作用:本地系统中的文件夹 文件状态未跟踪:文件刚添加到工作目录,还没有被Git管理(还没有git add) 已跟踪:Git已经对这个文件进行过管理,Git在本地仓库中有这个文件的历史记录。未修改:该文件没有再做任何修改。 已修改:修改过了,但是没有使用git a…

为什么说开展信创数据库势在必行

我国发展信创数据库的原因 - 保障信息安全:数据库存储着大量关键数据,如政府机密、金融交易记录、企业商业机密等。国外数据库可能存在安全漏洞或被植入后门,对国家信息安全构成威胁。发展信创数据库可实现自主可控,从根源上保障数据安全,降低安全风险。 - 减少技术依赖:…

20221320冯泰瑞《密码系统设计》第十二周

20221320冯泰瑞《密码系统设计》第十二周 学习内容Head First C 嗨翻C语言第12章 课程 mindmapAI 对学习内容的总结 要求让AI(kimi,元宝等)阅读学习内容并进行总结,教材内容可以使用微信读书或者云班课电子教材总结 《Head First C》第十二章的内容主要介绍了如何在C语言中…

20221320冯泰瑞《密码系统设计》第十一周

20221320冯泰瑞《密码系统设计》第十一周 学习内容Head First C 嗨翻C语言第11章 课程 mindmapAI 对学习内容的总结 要求让AI(kimi,元宝等)阅读学习内容并进行总结,教材内容可以使用微信读书或者云班课电子教材总结 《Head First C》第十一章的内容主要介绍了C语言中网络编…

深入理解第一范式(1NF):数据库设计中的基础与实践

title: 深入理解第一范式(1NF):数据库设计中的基础与实践 date: 2025/1/15 updated: 2025/1/15 author: cmdragon excerpt: 在关系型数据库设计中,规范化是确保数据一致性和减少冗余的重要步骤。第一范式(1NF)作为规范化的基础,要求每个表都应遵循数据的原子性及唯一性…

GaussDB技术解读——GaussDB架构介绍之集群管理层(CM)关键技术方案

GaussDB Kernel V5 集群管理层关键模块如下。图4 集群管理层组件设计图 CM 组件提供了四种服务 CM Agent, CM Server, OM Monitor, cm_ctl,与各类实例服务组件(CN, DN, GTM 等)一起构成了整个数据库集群系统。 cm_ctl 通过命令行执行集群的启动、停止、状态查询、主备倒换、…

GaussDB技术解读——GaussDB架构介绍之OM运维管理关键技术方案

​ GaussDB Kernel V5 OM运维管理关键模块如下。OM 运维主要功能有: 安装 升级 节点替换 扩容、缩容 自动告警 巡检 备份恢复、容灾 日志分析系统 在华为云的部署模式下,OM相关组件部署示意图如下: 图7 华为云OM运维管理 用户登录华为云Console,访问GaussDB Kernel V5的管控…

通义发布语音模型 MinMo:全双工、多口音;MiniCPM-o :端侧 GPT-4o 级视觉、语音、多模态实时流式大模型

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑…

部署 Browser-Use WebUI + DeepSeek 实现浏览器AI自动化

一、安装部署 1.安装 python3.11 或以上版本2.安装browser-use pip install browser-use3.安装 Playwright playwright install4.安装项目依赖 pip install langchain-google-genai==2.0.8 pip install pyperclip==1.9.0 pip install gradio==5.9.1 pip install langchain-olla…