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')
来检索它
我通过 Javascript
设置了一个 cookiemy_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')
来检索它