国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

如何不破壞 Request.php 代碼 修改 里面的sessionId的獲取方式

問題描述

session他是獲取的是cookie 如果我的session key

存到HTTP請求頭里面

怎么樣不修改他框架的代碼

截圖

我如果不修改 他的這個框架的文件

怎么樣使用 使用 session("admin")

他還會讀取 header里的 session key

截圖

786 2 0
2個回答

efnic

PHP特性,子類可以重寫父類的方法,就這一條還不夠嗎?
根目錄下的/support/Request.php 這個文件是允許隨便修改的,升級框架 不會覆蓋。

  • 2024-01-18

    最后還是修改框架源碼 發(fā)現(xiàn)改動最小 修改別的地方 所有調(diào)用 $request->session() 的地方都要改

  • efnic 2024-01-18

    我是在/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)。

  • efnic 2024-01-18

    中間件代碼如下:

    <?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);
        }
    }
  • efnic 2024-01-18

    通過此方法我整合過 likeadmin(運行在PHP-FPM,主要用了他的手機端源碼)、goview(可視化拖拉拽大屏可視化)

  • 2024-01-18

    牛的呢 我試試

efnic

或者直接加個中間件即可:

<?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);
    }
}
  • 2024-01-18

    謝謝你,我還是改了他框架的源碼

  • efnic 2024-01-18

    代碼都對的,有個常識的東西沒講;估計你掉坑里了,代碼沒生效對吧?
    中間件是有順序的。
    需要把設(shè)置sid的中間件,放到最前面。

  • efnic 2024-01-18

    你貼圖的源碼內(nèi),所謂的改workerman框架源碼,本質(zhì)還是從請求頭取所謂的session_id,然后設(shè)置sid。
    我想問的是,286-291行兩個if邏輯這么簡單,你不會看不懂吧?

  • 2024-01-19

    我感覺還是直接修改框架簡單 后面再說 按照那個 中間件的方法做了 沒有用

年代過于久遠,無法發(fā)表回答
??