session他是獲取的是cookie 如果我的session key
存到HTTP請求頭里面
怎么樣不修改他框架的代碼
我如果不修改 他的這個框架的文件
怎么樣使用 使用 session("admin")
他還會讀取 header里的 session key
PHP特性,子類可以重寫父類的方法,就這一條還不夠嗎?
根目錄下的/support/Request.php
這個文件是允許隨便修改的,升級框架 不會覆蓋。
我是在/support/Request.php
這個文件加了一個方法,來設(shè)置sid。
/**
* 設(shè)置session_id
* @param string $session_id
* @return $this
*/
public function setSid(string $session_id): static
{
$this->sid = $session_id;
return $this;
}
建立一個中間件,從請求頭里面取所謂的session_id(sid)。
中間件代碼如下:
<?php
namespace app\middleware;
use support\Request;
use Webman\Http\Response;
use Webman\MiddlewareInterface;
/**
* Token轉(zhuǎn)換Session
* - 從請求頭獲取token值,設(shè)置session_id
*/
class TokenMiddleware implements MiddlewareInterface
{
/**
* 鑒權(quán)
* @param Request|\Webman\Http\Request $request
* @param callable $handler
* @return Response
*/
public function process(Request|\Webman\Http\Request $request, callable $handler): Response
{
if ($sid = $request->header('token')) {
$request->setSid($sid);
}
return $handler($request);
}
}
或者直接加個中間件即可:
<?php
namespace app\middleware;
use support\Request;
use Webman\Http\Response;
use Webman\MiddlewareInterface;
/**
* Token轉(zhuǎn)換Session
* - 從請求頭獲取token值,設(shè)置session_id
*/
class TokenMiddleware implements MiddlewareInterface
{
/**
* 鑒權(quán)
* @param Request|\Webman\Http\Request $request
* @param callable $handler
* @return Response
* @throws \Exception
*/
public function process(Request|\Webman\Http\Request $request, callable $handler): Response
{
if ($sid = $request->header('token')) {
$request->sessionId($sid);
}
return $handler($request);
}
}