鏡像地址: https://juejin.im/post/5c35c1...php
在咱們的應用程序中,咱們能夠在JS端設置cookie,但咱們也但願在後端使用。咱們能夠使用$_COOKIE
全局魔術變量,但若是咱們使用Laravel,咱們會使用它提供的方法。讓咱們下Laravel中是如何使用的前端
在這篇文章中,咱們關注現有的cookie。若是對如何從 JavasScript 處理它們感興趣,請閱讀文檔。laravel
如今,假設咱們有一個帶有「 is-collapsed 」鍵的現有cookie 。咱們想檢查後端的值,以便在服務器端執行某些操做。web
咱們能夠經過 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 。框架