[譯]使用Laravel訪問前端Cookie

多釐發表於2019-01-09

映象地址: 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 。

如果您對更多資訊感興趣,請檢視 文件  或檢視有關 加密如何工作 的章節。

相關文章