yii2.0 Cookie的存取 以及为什么第一次刷新页面取不到cookie值

Yii2的Cookie主要是通过yii\web\Requestyii\web\Response进行操作

  • 通过\Yii::$app->response->getCookies()->add()添加Cookie
  • 通过\Yii::$app->request->cookies读取Cookie.

① 添加Cookie

  1. <?php
  2. //第一种方法
  3. $cookie = new \yii\web\Cookie();
  4. $cookie -> name = 'smister' ; //cookie的名称
  5. $cookie -> expire = time() + 3600 ; //存活的时间
  6. $cookie -> httpOnly = true ; //无法通过js读取cookie
  7. $cookie -> value = 'cookieValue' ; //cookie的值
  8. \Yii::$app->response->getCookies()->add($cookie);
  9. //第二种方法
  10. $cookie = new \yii\web\Cookie([
  11. ‘name’ => ‘smister’,
  12. ‘expire’ => time() + 3600 ,
  13. ‘httpOnly ’ => true ,
  14. ‘value’ => ‘cookieValue’
  15. ]);
  16. \Yii::$app->response->getCookies()->add($cookie);
  17. ?>

 读取Cookie

  1. <?php
  2. $cookie = \Yii::$app->request->cookies;
  3. //返回一个\yii\web\Cookie对象
  4. $cookie->get(‘smister’);
  5. //直接返回Cookie的值
  6. $cookie->getValue(‘smister’); //$cookie[‘smister’] 其实这样也是可以读取的
  7. //判断一个Cookie是否存在
  8. $cookie->has(‘smister’);
  9. //读取Cookie的总数
  10. $cookie->count(); //$cookie->getCount();跟count一样
  11. ?>

 删除Cookie

  1. <?php
  2. $ cookie = Yii::$app-> request-> cookies-> get(‘smister’);
  3. //移除一个Cookie对象
  4. \Y ii::$app-> response-> getCookies()-> remove($cookie);
  5. //移除所有Cookie,目前好像不太好使
  6. \Y ii::$app-> response-> getCookies()-> removeAll();
  7. ?>

在这里给大家普及一个小知识,我们在进行第一次存取cookie的时候,会取不到cookie,必须是第二次刷新页面,才可以取到coo

kie,为什么呢?

答:使用firefox的firebug查看”网络“:
 
客户端:
可以看到,浏览器(客户端)向服务器发出一次请求,发出请求的时候,在请求头信息中带上了各种参数,告诉服务器,我要接收什么样的文本(Accept)、什么编码格式(Accept-Encoding)、什么语言(Accept-Language)等等,当然,还把Cookie也传到了服务器(Cookie)。
 
服务器端:
第一步: setcookie('a','value')
因为cookie是设置在客户端的,setcookie函数自己并不能设置cookie,它只能通过头信息的方式告诉浏览器说:兄弟,我要设置一个cookie,键为a,值为value,你在你那里帮我设置一下。你也可以理解为:”来,朕今天高兴,赏你一个小甜饼“。
 
第二步:$_COOKIE['a']
$_COOKIE['a']很简单,执行的操作就是在浏览器带过来的cookie字符串中 搜索键为a的cookie,并返回它的值
 
 
很明显,这个”键为a“的cookie不可能找到,因为客户端访问服务器的时候,这个cookie压根就不存在,而前面第一步设置cookie的头信息,也还没有返回给客户端(php要从上到下把语句执行完才会返回给客户端
 
第三步: 服务器返回信息
其中,返回的头信息中带有”Set-Cookie a=value“,浏览器收到这个头信息,把cookie存放到电脑的某个文件中,对于不同浏览器cookie的存放位置貌似不同,这个不在本文的范围。

 
刷新浏览器,再次访问服务器的时候,同样,也会把很多头信息带给服务器,只不过这次带过去的cookie中,就多了一个a=value了。所心$_COOKIE['a']自然就能从cookie字符串中找到这个键为a的cookie的值。

猜你喜欢

转载自blog.csdn.net/li_lening/article/details/80904332
今日推荐