php hyperf 将 token 作为 session id

php hyperf 将 token 作为 session id

#该中间件一定要放在 Hyperf\Session\Middleware\SessionMiddleware的前面
<?php

declare(strict_types=1);
/**
 * This file is part of Hyperf.
 *
 * @link     https://www.hyperf.io
 * @document https://hyperf.wiki
 * @contact  group@hyperf.io
 * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
 */

namespace App\Middleware;

use Hyperf\Contract\ConfigInterface;
use Psr\Container\ContainerInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;

class SessionIdMiddleware implements MiddlewareInterface
{
    public function __construct(
        protected ContainerInterface $container,
        protected ConfigInterface $config
    ) {
    }

    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        //如果用 get 参数就这样
        // $params = $request->getQueryParams();
        // $token = (string)($params['token'] ?? '');
        $token = $request->getHeaderLine('token');
        if (strlen($token) > 0) {
            $key = $this->config->get('session.options.session_name', 'HYPERF_SESSION_ID');
            $cookie = $request->getCookieParams();
            $cookie[$key] = $token;
            $request = $request->withCookieParams($cookie);
        }
        return $handler->handle($request);
    }
}

文档:hyperf会话管理

留下回复


Warning: is_dir(): open_basedir restriction in effect. File(/www/wwwroot/my-wordpress/index.php/2025/06/22/php-hyperf-%E5%B0%86-token-%E4%BD%9C%E4%B8%BA-session-id/) is not within the allowed path(s): (/www/wwwroot/my-wordpress/:/tmp/) in /www/wwwroot/my-wordpress/wp-content/plugins/matomo/classes/WpMatomo/AIBotTracking.php on line 175