session他是获取的是cookie 如果我的session key
存到HTTP请求头里面
怎么样不修改他框架的代码
我如果不修改 他的这个框架的文件
怎么样使用 使用 session("admin")
他还会读取 header里的 session key
PHP特性,子类可以重写父类的方法,就这一条还不够吗? 根目录下的/support/Request.php 这个文件是允许随便修改的,升级框架 不会覆盖。
/support/Request.php
最后还是修改框架源码 发现改动最小 修改别的地方 所有调用 $request->session() 的地方都要改
我是在/support/Request.php这个文件加了一个方法,来设置sid。
/** * 设置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转换Session * - 从请求头获取token值,设置session_id */ class TokenMiddleware implements MiddlewareInterface { /** * 鉴权 * @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); } }
通过此方法我整合过 likeadmin(运行在PHP-FPM,主要用了他的手机端源码)、goview(可视化拖拉拽大屏可视化)
牛的呢 我试试
或者直接加个中间件即可:
<?php namespace app\middleware; use support\Request; use Webman\Http\Response; use Webman\MiddlewareInterface; /** * Token转换Session * - 从请求头获取token值,设置session_id */ class TokenMiddleware implements MiddlewareInterface { /** * 鉴权 * @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); } }
谢谢你,我还是改了他框架的源码
代码都对的,有个常识的东西没讲;估计你掉坑里了,代码没生效对吧? 中间件是有顺序的。 需要把设置sid的中间件,放到最前面。
你贴图的源码内,所谓的改workerman框架源码,本质还是从请求头取所谓的session_id,然后设置sid。 我想问的是,286-291行两个if逻辑这么简单,你不会看不懂吧?
286-291行
if
我感觉还是直接修改框架简单 后面再说 按照那个 中间件的方法做了 没有用
PHP特性,子类可以重写父类的方法,就这一条还不够吗?
根目录下的
/support/Request.php
这个文件是允许随便修改的,升级框架 不会覆盖。最后还是修改框架源码 发现改动最小 修改别的地方 所有调用 $request->session() 的地方都要改
我是在
/support/Request.php
这个文件加了一个方法,来设置sid。建立一个中间件,从请求头里面取所谓的session_id(sid)。
中间件代码如下:
通过此方法我整合过 likeadmin(运行在PHP-FPM,主要用了他的手机端源码)、goview(可视化拖拉拽大屏可视化)
牛的呢 我试试
或者直接加个中间件即可:
谢谢你,我还是改了他框架的源码
代码都对的,有个常识的东西没讲;估计你掉坑里了,代码没生效对吧?
中间件是有顺序的。
需要把设置sid的中间件,放到最前面。
你贴图的源码内,所谓的改workerman框架源码,本质还是从请求头取所谓的session_id,然后设置sid。
我想问的是,
286-291行
两个if
逻辑这么简单,你不会看不懂吧?我感觉还是直接修改框架简单 后面再说 按照那个 中间件的方法做了 没有用