Laravel 5.2:如果设置了cookie,则通过刀片检索cookie也会返回null

Sef*_*an2 5 cookies laravel-5.2 laravel-blade

my_cookie通过Javascript 设置了一个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);
   ....
Run Code Online (Sandbox Code Playgroud)

通过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
Run Code Online (Sandbox Code Playgroud)

写道 unset

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

结果总是如此unset.

小智 28

您可以使用

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'
   ];
}
Run Code Online (Sandbox Code Playgroud)

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


Kma*_*rYC 11

从评论移开:只有laravel创建的cookie才能通过laravel处理.尝试原生cookie $ _COOKIE.或者尝试通过laravel创建cookie然后dd($ _ COOKIE)你会发现它与由本机PHP创建的cookie完全不同


小智 6

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