第一次在 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
- v$session - 你看到的event真的是session當前的等待事件麼?Session事件
- 當瀏覽器 禁用 cookie 時 , 我們如何使用 session瀏覽器CookieSession
- 金融科技:金融包容還是金融排斥?
- 面試官:Java類是如何被載入到記憶體中的?面試Java記憶體
- WinMain是如何被呼叫的AI
- Java Main 如何是如何被執行的?JavaAI
- 應用中如何使用適當的資料結構資料結構
- Java中如何使用泛型實現介面中的列表集合?Java泛型
- ArrayMap是如何提高記憶體的使用效率的?記憶體
- 什麼是介面?如何定義介面?如何實現介面?
- 密碼是如何被竊取的密碼
- Go timer 是如何被排程的?Go
- 如何優雅的使用介面
- 如何使用Spring的FactoryBean介面SpringBean
- 在Java中是如何定義和宣告介面的?Java
- cookie與session的使用CookieSession
- 教你在Nodejs中如何獲取當前函式被呼叫的行數及檔名NodeJS函式
- 交易是如何被建立和打包的4
- Android 如何設計使用者Session管理?AndroidSession
- 說說我當初是如何學Linux的Linux
- 當年,我是如何把微服務落地的微服務
- JSP筆記-sessionJS筆記Session
- 【詳解】Tomcat是如何監控並刪除超時Session的?TomcatSession
- 什麼是介面,如何理解
- Spring Session JDBC的使用 - javadevjournalSpringSessionJDBCJavadev
- 小數在記憶體中是如何儲存的?記憶體
- 我是一個請求,我是如何被髮送的?
- 爬蟲是如何被網站識別的?爬蟲網站
- 代理IP中的API介面是什麼?API
- session是什麼時候建立的Session
- Tomcat中的session實現TomcatSession
- Tomcat 中的 Session 和 CookieTomcatSessionCookie
- hibernate中的no session問題Session
- Mybatis原始碼分析(四)mapper介面方法是怎樣被呼叫到的MyBatis原始碼APP
- 為什麼很多人排斥中國女生嫁去外國?
- Linux 系統中如何檢視當前所有登入的使用者Linux
- 智慧雲解析的當機切換是如何實現的?如何有效預防伺服器當機?伺服器