Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I set a cookie my_cookie via 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);
   ....

Via Chrome Cookie Inspector I see that the cookie is created with value 1.

Via Laravel Blade I tried:

 @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

that writes unset

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

The result is always unset.

like image 562
Sefran2 Avatar asked Aug 20 '16 09:08

Sefran2


2 Answers

You can use

App\Http\Middleware\EncryptCookies's field $except for your needs.

The code of the middleware will look like this

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

And now you can use Cookie::get('my_cookie') or request()->cookie('my_cookie') for retrieving it

like image 127
Artem V. Avatar answered Oct 10 '22 00:10

Artem V.


Move from comment: Only cookie created by laravel can handle by laravel. Try native cookie $_COOKIE. Or try create cookie by laravel then dd($_COOKIE) you'll see it totally different to cookie which created by native PHP

like image 34
KmasterYC Avatar answered Oct 10 '22 02:10

KmasterYC