映象地址: https://juejin.im/post/5c35c1…
在我們的應用程式中,我們可以在JS端設定cookie,但我們也希望在後端使用。我們可以使用$_COOKIE
全域性魔術變數,但如果我們使用Laravel,我們會使用它提供的方法。讓我們下Laravel中是如何使用的
在前端設定Cookie
在這篇文章中,我們關注現有的cookie。如果對如何從 JavasScript 處理它們感興趣,請閱讀文件。
現在,假設我們有一個帶有“ is-collapsed ”鍵的現有cookie 。我們想檢查後端的值,以便在伺服器端執行某些操作。
Laravel和Cookies
我們可以通過 request()->cookie()
方法或使用 Cookie
Facade 來訪問我們的cookie 。
問題是,如果我們想要訪問我們在前端設定的 cookie,我們會得到 null
。但是我們使用 $_COOKIE
變數,我們可以訪問它,這證明 cookie 是存在的。那問題在什麼地方呢?
預設情況下,框架帶有用於加密cookie的中介軟體。如果我們從後端設定一個cookie,它會自動加密,因此Laravel可以讀取它。從JS我們沒有任何加密,這就是我們無法從框架中訪問它們的原因。
如何解決這個問題?
在 app/Http/Kernel.php 中, 在 web 中介軟體分組中(5.2+),我們可以找到 EncryptCookies::class
行。通過註釋這個中介軟體,可以關閉 cookie 的自動加密,但這種方法不是我們想要的解決方案。
建議的方法是使用中介軟體並新增一些不需要加密的排除項,Laravel無論怎樣都應該訪問它們。我們可以在 app/Http/Middlewares/EncryptCookies.php. 插入中介軟體的排除項。
/**
* The names of the cookies that should not be encrypted.
*
* @var array
*/
protected $except = [
`is-collapsed`,
];
通過將 cookie 的名稱新增到 except 陣列,我們可以使用 Cookie Facade 或 request()->cookie()
方法讀取cookie 。