前面的话:
Laravel会加密所有已创建的cookie信息,并附加上授权码,当客户端擅自修改cookie信息时,该cookie将被废弃,从而保证安全性。
1.Cookie::make() 添加一个新的cookie 、Cookie::forever() 创建一个永不过期的cookie键值、Cookie::get() 获取一个指定的cookie值:
Route::get('cookieset', function()
{
$foreverCookie = Cookie::forever('forever', 'Success');
$tempCookie = Cookie::make('temporary', 'Victory', 5);
return Response::make()->withCookie($foreverCookie)->withCookie($tempCookie);
});
Route::get('cookietest', function()
{
$forever = Cookie::get('forever');
$temporary = Cookie::get('temporary');
return View::make('cookietest', array('forever' => $forever, 'temporary' => $temporary, 'variableTest' => 'works'));
});
注意:
laravel5.2使用make有点问题
需要使用是可以的Cookie::queue('GobackUrl', $url, 30);
有些时候,你想设置一个 Cookie 是不加密的,例如想用来跟 JS 交互,JS 可以直接读取到明文,可是以下面的代码设置后:
解决方案#
如你cookie 键值为cookie_for_js的需要与前台交互
添加到 App\Http\Middleware\EncryptCookies 的 排除名单 中:
<?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_for_js',
];
}
对了,如果要给 JS 读取的话,要把 cookie 的 http only
属性去掉,请使用以下代码:
Cookie::queue('cookie_for_js', 'can you read me?', $minutes = 99999999, $path = null, $domain = null, $secure = false, $httpOnly = false);
2、Cookie存储数组:
Route::get('cookieset', function()
{
$user_info = array('name'=>'good','age'=>12);
$user = Cookie::make('user',$user_info,30);
return Response::make()->withCookie($user);
});
Route::get('cookietest', function()
{
dd(Cookie::get('user'));
});