概述

Cookie的添加其实很简单,直接使用Cookie::make(),在使用方法前,需要引入Cookie的门面use Illuminate\\Support\\Facades\\Cookie;,这样就可以完成Cookie的设置了(当然不引入直接 \\Cookie 使用也能通过命名空间自动加载)。

不过,设置后我们如何才能取到Cookie值呢?有搜索过相关问题的开发人员肯定知道,网上的答案千篇一律都是:Cookie::get(),有的甚至附上了代码:

Cookie::make('test', 'hello, world', 10);echo Cookie::get('test');

如果你按照这种类似的回答来测试Cookie,肯定会发现设置cookie的值永远都是null。多次测试无效下,你都会怀疑自己的Laravel框架是不是有问题!

其实,在Laravel框架中使用Cookie,就不得不提到Response和Request。经常用浏览器调试程序的开发者可能会留意过,在请求地址的Response HeadersRequest Headers中,都包含有cookie信息。没错,如果你在Laravel框架中使用Cookie都离不开Response和Request,下面我们就来介绍Cookie的正确添加和获取方法。

1.Cookie::make()、Cookie::forever()、Cookie::get()的使用方法:

Route::get('cookieset', function()
{    $foreverCookie = Cookie::forever('forever', 'Success');    $tempCookie = Cookie::make('temporary', 'My name is fantasy', 5);//参数格式:$name, $value, $minutes    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' => 'it works'));
});
 = \\Cookie('cookie_name', 'value', 5 = ['title'=>'hello world'->view('home.hello', ->cookie();

2、Cookie存储数组:

Route::get('cookieset', function()
{    $user_info = array('name'=>'laravel','age'=>12);    $user = Cookie::make('user',$user_info,30);    return Response::make()->withCookie($user);
});Route::get('cookietest', function()
{dd(Cookie::get('user'));
});

下面详细谈谈laravel的cookie具体咋玩吧

添加Cookie

例如,我们需要在控制器中设置一个"Hello, Laravel"的cookie值,并设置有效期为10分钟。这里推荐使用cookie的队列方法Cookie::queue(),因为这样Cookie会自动添加到响应:

<?phpnamespace App\\Http\\Controllers;use Cookie;use App\\Http\\Controllers\\Controller;class DashboardController extends Controller
{    /*** Show the application index.** @return Response     */public function index(){Cookie::queue('test', 'Hello, Laravel', 10);//如果不适用上面的use Cookie,这里可以直接调用 \\Cookie        return view('index');}
}

看看Response Headers中是不是多了一条set-cookie记录。当然,如果你使用的是Response,可以直接使用Response中的withCookie()方法,将cookie添加到响应中:

  =  = Cookie::make('test', 'Hello, Laravel', 10 ->make('index')->withCookie(

要设置一个永不过期的的cookie值,可以使用Cookie::forever()方法:

Cookie::forever('test', 'Hello, Laravel');

Cookie自身并不提供该方法,由于Cookie的门面由\\Illuminate\\Cookie\\CookieJar提供,所以Cookie可以使用该类中的方法。这里附上queue()方法的源码:

/**
* Queue a cookie to send with the next response.
*
* @param  mixed
* @return void*/public function queue()
{    if (head(func_get_args()) instanceof Cookie) {        $cookie = head(func_get_args());} else {        $cookie = call_user_func_array([$this, 'make'], func_get_args());}    $this->queued[$cookie->getName()] = $cookie;
}

从源码可以得知,queue()方法实际上也是调用的make()方法。

注意:有些朋友提出在返回的视图上注入cookie的方法 return view('index')->withCookie($cookie),亲测无效。推荐使用 queue()

获取Cookie

在概述里我们提到过,Cookie的使用离不开Response和Request。获取Cookie的值有两个层面,一个是服务端,另一个是客户端。如果要服务端获取到Cookie的值,就需要从Request中获得:

public function index(Request $request)

{    $cookie = $request->cookie('test');dump($cookie);
}

如果想获得所有Cookie的值,可以使用不传参数的方法:

public function index(Request $request)
{    $cookies = $request->cookie();dump($cookies);
}

再次访问地址,我们会得到一个所有cookie值的数组,包括我们刚刚设置的test:

array:3 [▼  "XSRF-TOKEN" => "CDSXUUYYHJHGDDFGHJAxPNNsVxLHGTRYUGJ""laravel_session" => "870a775gthhgef0b9f357edc6r6587878999876556""test" => "Hello, Laravel"]

当我们需要在客户端使用的时候,获取Cookie的值就不是这样了。首先,我们通过响应withCookie($cookie)传输到客户端的数据并不是一个字符串,而是一个cookie对象:

Cookie {#1490 ▼#name: "test"#value: "Hello, Laravel"#domain: null#expire: 1493791460#path: "/"#secure: false#httpOnly: true}

获取value值,Cookie类提供了一个getValue()的方法来拿取。例如在模板中编辑代码:

{{ $cookie->getValue() }}

再次刷新页面时,就会得到设置的test的cookie值:

Hello, Laravel

清除Cookie

清除Cookie的方法比较简单,原理和设置Cookie一样的,只是将过期时间设置成了过去。这里也需要将Cookie加入到HTTP的Response中,使用make()或者forget()方法均可:

//这里有点大家要注意,由于我之前使用的\\Cookie::queue('test', 'i love loravel');删除时使用\\Cookie::forget一直删除不了,这里使用方式一
方式一:
 \\Cookie::queue(\\Cookie::forget('test'));
或 \\setcookie('test', '', -1, '/');
 = Cookie::forget('test' Redirect::route('index')->withCookie();

转载于:https://blog.51cto.com/12879490/1922349

Laravel5中Cookie的使用相关推荐

  1. PHP中Cookie的使用---添加/更新/删除/获取Cookie 及 自动填写该用户的用户名和密码和判断是否第一次登陆...

    PHP中Cookie的使用---添加/更新/删除/获取Cookie 及 自动填写该用户的用户名和密码和判断是否第一次登陆  什么是cookie 服务器在客户端保存用户的信息,比如登录名,密码等 这些数 ...

  2. C# .net中cookie值为中文时的乱码解决方法

    C# .net中cookie值为中文时的乱码解决方法 一.cookie的名称或子cookie的名称不能为中文,否则无法获得cookie 这个好办,名称不用中文即可 二.cookie的值为中文时候,取c ...

  3. php5.5.9 新特性,php,_PHP 5.5.9版本中COOKIE的奇怪现象,php - phpStudy

    PHP 5.5.9版本中COOKIE的奇怪现象 我在localhost下建了四个文件 /1.php /a/1.php /test/1.php /test/a/1.php 文件中的代码都是一样的 set ...

  4. php中cookie的用法

    php中cookie的用法是怎么样的?在php中使用cookie需要注意什么?cookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制. PHP在http协议的头信息里发送cookie, ...

  5. win7中cookie的保存位置

    操作系统: windows7 64位 中文旗舰版 cookie是会话管理机制中的重要内容 win7中cookie的保存地址: C:\用户\$USERNAME\AppData\Roaming\Micro ...

  6. 在laravel5 中使用queue队列

    如何在laravel5 中使用queue队列 Laravel Queue是延迟处理应用程序中耗时任务的有效方法.此类任务的示例可能包括每当新用户在您的应用程序中注册或通过社交媒体分享帖子时发送验证电子 ...

  7. Win7系统中Cookie位置

    Win7系统中Cookie位置: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Cookies

  8. jquery中cookie用法实例详解(获取,存储,删除等)

    这篇文章主要介绍了jquery中cookie用法,结合实例详细分析了jQuery操作cookie的获取,存储,删除等操作,并附带了Jquery操作Cookie记录用户查询过信息实现方法,需要的朋友可以 ...

  9. java禁止js获取cookie_java中Cookie被禁用后Session追踪问题

    一.服务器端获取Session对象依赖于客户端携带的Cookie中的JSESSIONID数据.如果用户把浏览器的隐私级别调到最高,这时浏览器是不会接受Cookie.这样导致永远在服务器端都拿不到的JS ...

最新文章

  1. TensorFlow迁移学习的识别花试验
  2. java获取当前tomcat线程pid_java 查看tomcat线程信息(示例代码)
  3. 洛谷P2670扫雷游戏题解
  4. 贝叶斯定理、显著性检验、p值关系、分类
  5. AdaptiveMaxPool的作用
  6. MapUtils常用方法
  7. android --多线程下载
  8. Linux 命令(128)—— useradd 命令
  9. 关于单点登录的实现方法
  10. JS实现60s倒计时(亲测有效),及span标签如何使用和禁用onclick事件
  11. 英飞凌TC297 PSPR与DSPR
  12. TKG 1.5.1 的 BYOH 集群部署
  13. Fortran的全局变量(Common blocks)
  14. 设计模式——备份模式
  15. 七月上伴奏计算机按键,数字化音乐专业教室配备方案(7页)-原创力文档
  16. 在华为云服务器安装libreoffice软件
  17. [网络安全自学篇] 七十二.逆向分析之OllyDbg动态调试工具(一)基础入门及TraceMe案例分析
  18. LeetCode 213. House Robber II(小偷游戏)
  19. GreenPlum的学习心得和知识总结(三)|Greenplum数据库快速入门
  20. 微信小程序 错题记事本 111111

热门文章

  1. Android中Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现)
  2. Docker基础技术:Linux Namespace【上】
  3. 树莓派练习程序(火焰检测)
  4. leetcode 3. Longest Substring Without Repeating Characters
  5. 区块链学习路线及资料索引
  6. 取子字符串的两种情形的解决办法(c#)
  7. yum报错Error: Cannot retrieve repository metadata (repomd.xml) for repository: rhel-source
  8. Bootstrap-datepicker设置开始时间结束时间范围
  9. WDS部署操作系统之二 制作并捕获模板计算机映像
  10. Android LayoutInflater原理分析,带你一步步深入了解View(一)