Laravel 5.2:通过 blade 检索 cookie returns null 如果设置了 cookie

Laravel 5.2: retrieving a cookie via blade returns null also if cookie is set

我通过 Javascript

设置了一个 cookie my_cookie
   function createCookie(name, value, days) {
      var expires;
      if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        expires = "; expires="+date.toUTCString();
      }
      else {
        expires = "";
      }
      document.cookie = name+"="+value+expires+"; path=/";
   }

   ....
   createCookie('my_cookie', 1, 365);
   ....

通过 Chrome Cookie Inspector 我看到 cookie 是用值 1 创建的。

通过 Laravel Blade 我试过了:

 @if (Cookie::get('my_cookie') !== null) // or Cookie::get('my_cookie') == 1 or Cookie::get('my_cookie') == '1'
      <p>set</p>
 @else
      <p>unset</p>
 @endif

unset

 @if (request()->cookie('my_cookie') == '1') // or @if (request()->cookie('my_cookie') == 1)
      <p>set</p>
 @else
      <p>unset</p>
 @endif

结果总是unset

来自评论:只有 laravel 创建的 cookie 可以由 laravel 处理。试试本机 cookie $_COOKIE。或者尝试通过 laravel 然后 dd($_COOKIE) 创建 cookie 你会发现它与原生 PHP

创建的 cookie 完全不同

这是因为 laravel 加密了他们的 cookie。您可以不包含 EncryptCookies 中间件来处理 cookie,这些中间件不是由 laravel 设置的。从 $middlewareGroups 中删除 \App\Http\Middleware\EncryptCookies::class app\Http\Kernel.php

你可以使用

App\Http\Middleware\EncryptCookies 的字段 $except 满足您的需求。

中间件的代码如下所示

<?php

namespace App\Http\Middleware;

use Illuminate\Cookie\Middleware\EncryptCookies as BaseEncrypter;

class EncryptCookies extends BaseEncrypter
{
  /**
   * The names of the cookies that should not be encrypted.
   *
   * @var array
   */
   protected $except = [
      'my_cookie'
   ];
}

现在您可以使用 Cookie::get('my_cookie')request()->cookie('my_cookie') 来检索它