首页 > 编程语言 >php的token管理类(AI生成)

php的token管理类(AI生成)

时间:2025-01-15 16:32:39浏览次数:1  
标签:令牌 null return AI JWT token encode php

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

<?php

class 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)标准来生成和验证令牌。你可以根据具体需求进行扩展和修改。

标签:令牌,null,return,AI,JWT,token,encode,php
From: https://www.cnblogs.com/cblx/p/18673328

相关文章

  • 2024,语音 AI 元年;2025,Voice Agent 即将爆发丨年度报告发布
      围绕VoiceAgent产品的研发、商业化和增长的完整生命周期,报告构建出一份VoiceAgent产业生态全景图。 2024年,AI与实时互动技术的结合达到了前所未有的高度。 5月,OpenAI发布了GPT-4o,并展示了其对话功能,仿佛电影《HER》中的智能助手走入了现实生活。 ......
  • 【AI 与 IT 从业者:共舞还是取代?】
    ......
  • GaussDB企业级AI-Native分布式数据库
    华为GaussDB是一个企业级AI-Native分布式数据库。GaussDB采用MPP(MassiveParallelProcessing)架构,支持行存储与列存储,提供PB(Petabyte,2的50次方字节)级别数据量的处理能力。华为Gauss数据库是全球首款AI-Native数据库,能够同时支持X86、ARM、GPU、NPU等异构计算。数......
  • 【转】[C#] WebAPI 使用async和await
    转自:kimi.ai在.NETFramework4.5及以上版本中,WebAPI支持async和await关键字的使用。使用async和await对调用方(客户端)和服务器端都有不同的影响,以下是详细说明:对调用方(客户端)的影响响应时间:对于单个客户端请求来说,使用async并不会显著减少请求的响应时间。无论是同步还是......
  • 划重点:OpenAI o1/o3的正确打开方式
    苹果&SpaceX前工程师BenHylak订阅 200美元/月的o1pro后,经过一天的认真尝试,发现它很差劲: 1、每次我问一个问题,都要等5分钟;2、结果看到的只是一大堆自相矛盾的官样文章;3、还有未经请求的架构图+优缺点列表。是o1真的不行吗?还是使用方式不对?重点来了,OpenAICEO山姆......
  • Php+Mysql统计网页总访问次数和实时在线人数-海云博客
    自己写了一个统计,一个简单的网站流量统计,不错拿出来分享。可以统计当前页面的总访问次数和当前页面的实时在线人数。还可以显示你进入多少次。样式还有彩色背景渐变盒子,鼠标滑过或点击变成彩色直线,其他样式可以自己再改改。废话不多说直接上代码。海云博客 | 此文章链接:ht......
  • 代码审计-PHP原生开发&SQL注入&数据库监控&正则搜索&文件定位&静态分析
    知识点1、PHP审计-原生态开发-SQL注入&数据库语句监控2、PHP审计-原生态开发-SQL注入&正则匹配搜索3、PHP审计-原生态开发-SQL注入&功能追踪代码审计分类:1、原生态开发-代码审计源码案例2、框架类开发-代码审计源码案例3、组件类开发-代码审计源码案例4、前端类开发-代码......
  • 为什么软件测试开发需要智能体(AI Agent)?
    随着人工智能技术的快速发展,AIAgent(智能体)已经成为软件测试开发中的一项颠覆性技术。从自动化测试到智能化缺陷检测,AIAgent正在改变传统的测试方式。那么,AIAgent到底有多强?它如何提升软件测试的效率与质量?本文将为你深入解析AIAgent在软件测试中的应用及其带来的巨大优......
  • AI应用开发先了解这些概念:智能体、LLM、RAG、提示词工程
    什么是智能体(Agent)一种基于LLM(LargeLanguageModel)的能够感知环境、做出决策并执行行动以实现特定目标的自主系统。与传统人工智能不同,AlAgent模仿人类行为模式解决问题,通过独立思考和调用工具逐步完成给定目标,实现自主操作。通用智能体平台以Agent为核心技术驱动,......
  • 为AI聊天工具添加一个知识系统 之36 语义网络雏形的形成 之2
    本文要点在接下来的讨论之前先感觉一下,本项目(为AI聊天工具建立一个知识系统)所树立的第一个目标(即切入点:为聊天者组织一个语义网络雏形)和这条路(通过word的三种形态描述个人“关注点”的意向相关性并通过三个附件作为为他建立知识系统的支持以便能将聊天者的个......