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会话管理
