關於 Laravel Session 的困惑,望高手解決

來源:互聯網
上載者:User
在laravel5.*中,session start被放到了web中介軟體中,如

    /**     * The application's route middleware groups.     *     * @var array     */    protected $middlewareGroups = [        'web' => [            \App\Http\Middleware\EncryptCookies::class,            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,            \Illuminate\Session\Middleware\StartSession::class,   //<---------            \Illuminate\View\Middleware\ShareErrorsFromSession::class,            \App\Http\Middleware\VerifyCsrfToken::class,        ],        'api' => [            'throttle:60,1',            'bindings',        ],    ];

並且根據Route載入中介軟體的代碼可以得知Controller是在被make之後才調用中介軟體

    /**     * Get the middleware for the route's controller.     *     * @return array     */    public function controllerMiddleware()    {        if (! $this->isControllerAction()) {            return [];        }        return ControllerDispatcher::getMiddleware(            $this->getController(), $this->getControllerMethod()        );    }

這個時候問題就來了,我有一個BaseController,在建構函式裡面會判斷使用者登入狀態,如果已經登入就擷取登入使用者資訊儲存到$this->login_user_info中供子類調用,如果先make controller,session還沒有start,因此在建構函式中是無法擷取到登入使用者的session_id,部分代碼如下

/** * 控制層公有方法集合 * Class BaseController */abstract class BaseController extends Controller{    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;    public $login_user_info;    public $login_subuser_info;    public function __construct()    {        $this->userModel    = app(UserModel::class);        if (session()->get('user_id')) {            $this->login_user_info          = $this->userModel->getLoginUser();            //設定模板全域變數            view()->share(['login_user_info' => $this->login_user_info]);        }    }

我測試過在middleware中是可以得到session,因為這個時候已經執行了StartSession中介軟體代碼,至於我為什麼要這麼做就說來話長,我的項目是一個老項目切換架構到laravel,所以為了最大限度的保持原有邏輯,並且還有一些奇奇怪怪的寫法,沒有採用Auth,這些暫且不論,有沒有辦法可以在建構函式中得到session,求各位大神幫忙,謝謝

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.