【问题标题】:Laravel 5.2: retrieving a cookie via blade returns null also if cookie is setLaravel 5.2:如果设置了 cookie,通过刀片检索 cookie 也会返回 null
【发布时间】:2016-12-27 09:58:49
【问题描述】:

我通过 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 检查器,我看到创建的 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 创建 cookie 然后dd($_COOKIE) 你会明白为什么
  • @KmasterYC:谢谢。如果您在回答中转换您的评论,我会接受它
  • 好的。我现在搬家。谢谢你:)

标签: cookies laravel-5.2 laravel-blade


【解决方案1】:

你可以使用

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()-&gt;cookie('my_cookie') 来检索它

【讨论】:

  • 哇,我花了很多时间来做这个,谢谢。奇怪的是,文档中没有关于此的信息。
  • 应该被批准回答:clap:
【解决方案2】:

从评论中移出:只有 laravel 创建的 cookie 才能被 laravel 处理。试试原生 cookie $_COOKIE。或者尝试通过 laravel 创建 cookie 然后 dd($_COOKIE) 你会发现它与原生 PHP 创建的 cookie 完全不同

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 所以当你加密 cookie 时,Laravel 将无法访问它? :P 很有趣,那我们为什么要使用 Laravel?
    猜你喜欢
    • 1970-01-01
    • 2022-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 2011-11-09
    • 2015-07-23
    相关资源
    最近更新 更多