第一次在 Laravel
的介面當中使用 Session
,受到成噸的傷害。
話不多說,直奔主題吧。
使用的程式碼是剛通過 composer create-project --prefer-dist laravel/laravel blog
安裝的。
首先先來呼叫下 Session
,路由為 api.php
中的介面路由,並在首頁 welcome.blade.php
中使用 JQuery
的 $.get()
來訪問下該介面。
訪問下看是否設定成功。
這樣應該是設定成功了吧,再加點判斷,看下客戶端能不能找到 Session
。
看下結果。
What ?為啥沒找到我的我名字呢?通過讀文件知道還有另一種寫法,我們再來嘗試下看看。
再看下結果。
Emmmm...直接報錯了,有點過分了吧。直接 Google
報錯資訊發現,Laravel
中的 Session
被封裝了,要使用 Session
必需要開啟 Session
中介軟體。而預設 api
中沒有開啟該中介軟體,如下圖所示。
大家有沒有在 web
中看到 \Illuminate\Session\Middleware\StartSession::class
這個中介軟體,從字面意思應該很清楚了吧?這個就是開啟 Session
的中介軟體,讓我們加在下面的 api
中再嘗試下。
沒報錯了,但是好像還是獲取不到上一次請求設定的 Session
啊,灰常尷尬。讓我們從客戶端獲取服務端 Session
的原理開始思考,大家應該都知道,Session
在設定時,會伴隨 Cookie
在客戶端的生成,當客戶端請求時會帶上設定好的 Cookie
,一般存的是 session_id
,服務端拿到這個 session_id
後就能順利拿到 Session
。那我們能設定只是找不到,會不會是 Cookie
出錯了呢?所以讓我們看看介面響應的 Cookie
。(PS:我設定了 .env
中的 SESSION_LIFETIME
為24小時,這裡就不多贅述了,並且為了區別,我設定了 APP_NAME
為 test
以區分 Laravel
自己生成的 Cookie
)
這裡主要看是否有 Value
和 Expires
,都有值且過期時間為1天,不存在秒過期的情況。那是為什麼呢?
各位,請仔細看 Request
中的 Cookie
與響應 Response
的 Cookie
,有沒有發現 Value
有很明顯的差別,完全不像是一個應用生成的 Cookie
,並且當你重新整理頁面時原本 Request
中的 test_session
應該替換為上一次請求中的 Response
中的 test_session
,這樣就能找到之前設定好的 Session
了,但實際是又重新生成了一個不同的 Cookie
。那麼問題很明顯了,設定 Session
返回的 Cookie
是有誤的,導致框架每次載入時,判斷這個 Cookie
為無效的並重新生成了一個新的,所以找不到之前的 Session
。
讓我們又回到中介軟體那裡。
我在 web
中又發現一個 \App\Http\Middleware\EncryptCookies::class
,字面意思,一個 Cookie
加密中介軟體。好像跟我們的問題有關係誒,我已經將它新增到 api
中,我們再試一下。
哎喲,終於好了,介面裡面使用 Session
就這樣被排斥嗎 :cry:
記介面當中使用 session 是如何被排斥的
相關文章
- 如何在其他Session跳過被鎖定的記錄Session
- session bean中的session如何理解?SessionBean
- v$session - 你看到的event真的是session當前的等待事件麼?Session事件
- 當瀏覽器 禁用 cookie 時 , 我們如何使用 session瀏覽器CookieSession
- 如何使用bean:write輸出session中的資訊BeanSession
- WinMain是如何被呼叫的AI
- 使用者查詢當前session IDSession
- servlet中如何保留session???ServletSession
- Java Main 如何是如何被執行的?JavaAI
- Java中如何使用泛型實現介面中的列表集合?Java泛型
- 應用中如何使用適當的資料結構資料結構
- 什麼是介面?如何定義介面?如何實現介面?
- dba_tables中的avg_row_len是如何被計算的?
- 密碼是如何被竊取的密碼
- 網站是如何「看到」使用者的:獨立IP與cookie和Session網站CookieSession
- 在Java中是如何定義和宣告介面的?Java
- ArrayMap是如何提高記憶體的使用效率的?記憶體
- 在ActionForm中如何獲取session中的資料?ORMSession
- hibernate的session.connection被session.dowork()替代Session
- 如何在win10系統中開啟被隱藏的登陸介面?Win10
- struts2中session使用Session
- Android 判斷當前的介面是否是桌面的方法Android
- 交易是如何被建立和打包的4
- Windows Phone是如何被微軟ZUO死的?Windows微軟
- 開源專案是如何被搞砸的?
- 如何優雅的使用介面
- 查詢session被鎖的sql(轉)SessionSQL
- 購買藍芽介面卡上當記藍芽
- 【面試被虐】說說遊戲中的敏感詞過濾是如何實現的?面試遊戲
- 檢視oracle當前sessionOracleSession
- Linux 有問必答:如何知道當前正在使用的 shell 是哪個?Linux
- 什麼是介面,如何理解
- 當年,我是如何把微服務落地的微服務
- 小數在記憶體中是如何儲存的?記憶體
- 檢視錶被 哪個SESSION 哪個SQL在使用SessionSQL
- 教你在Nodejs中如何獲取當前函式被呼叫的行數及檔名NodeJS函式
- 使用者介面設計--系統的當前物件物件
- 我是一個請求,我是如何被髮送的?