[譯]使用Laravel訪問前端Cookie

鏡像地址: https://juejin.im/post/5c35c1...php

在咱們的應用程序中,咱們能夠在JS端設置cookie,但咱們也但願在後端使用。咱們能夠使用$_COOKIE 全局魔術變量,但若是咱們使用Laravel,咱們會使用它提供的方法。讓咱們下Laravel中是如何使用的前端

在前端設置Cookie

在這篇文章中,咱們關注現有的cookie。若是對如何從 JavasScript 處理它們感興趣,請閱讀文檔laravel

如今,假設咱們有一個帶有「 is-collapsed 」鍵的現有cookie 。咱們想檢查後端的值,以便在服務器端執行某些操做。web

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 的自動加密,但這種方法不是咱們想要的解決方案。cookie

建議的方法是使用中間件並添加一些不須要加密的排除項,Laravel不管怎樣都應該訪問它們。咱們能夠在 app/Http/Middlewares/EncryptCookies.php. 插入中間件的排除項。app

/**
 * The names of the cookies that should not be encrypted.
 *
 * @var array
 */
protected $except = [
    'is-collapsed',
];

經過將 cookie 的名稱添加到 except 數組,咱們能夠使用 Cookie Facade 或 request()->cookie() 方法讀取cookie 。框架

若是您對更多信息感興趣,請查看 文檔  或查看有關 加密如何工做 的章節。

相關文章
相關標籤/搜索