前面的话:
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
- {
-
-
-
-
-
- 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'));
- });