设置一个cookie,用Cookie::get('name'); $request->cookie('name'); 等无法获取到数据
原因:Laravel 框架内,出于安全的原因考虑,默认对所有 cookie 进行加密存储,而未被加密过得cookie则被laravel认为是无效的所以返回null
可以用:$_COOKIE['name'];
解决办法
找到 App\Http\Middleware\EncryptCookies
文件, 设置好需要过滤的cookie:
<?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 = [
'cookie_name', //cookie名称
];
}
有时,你想设置一个 Cookie 是不加密的,例如想用来跟 JS 交互,JS 可以直接读取到明文,可是以下面的代码设置后:
Cookie::queue('cookie_name', 'hello', 99999999);
如果要给 JS 读取的话,要把 cookie 的 http only 属性去掉,使用以下代码:
Cookie::queue('cookie_name', 'hello', $minutes = 99999999, $path = null, $domain = null, $secure = false, $httpOnly = false);