Laravel 5.2: получение cookie через блейд возвращает ноль также, если cookie установлен

cookies laravel-5.2 laravel-blade

4479 просмотра

3 ответа

Я установил куки my_cookieчерез Javascript

   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.

Автор: Sefran2 Источник Размещён: 08.11.2019 11:07

Ответы (3)


11 плюса

Решение

Отойти от комментария : только cookie, созданные laravel, могут обрабатывать laravel. Попробуйте родной файл cookie $ _COOKIE. Или попробуйте создать cookie с помощью laravel, затем dd ($ _ COOKIE), и вы увидите, что он полностью отличается от cookie, созданного собственным PHP

Автор: KmasterYC Размещён: 20.08.2016 12:15

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'
   ];
}

И теперь вы можете использовать Cookie::get('my_cookie')или request()->cookie('my_cookie')для получения его

Автор: Artem V. Размещён: 22.08.2017 05:21

4 плюса

Это потому, что Laravel шифрует их куки. Вы можете просто не включать EncryptCookiesпромежуточное ПО для работы с файлами cookie, которые не были установлены laravel. Удалить \App\Http\Middleware\EncryptCookies::classиз $middlewareGroupsвapp\Http\Kernel.php

Автор: Alex Karagachev Размещён: 02.03.2017 07:36
Вопросы из категории :
32x32