前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Yii2.0 的COOKIE和SESSION用法

Yii2.0 的COOKIE和SESSION用法

作者头像
botkenni
发布2019-09-02 16:43:37
1.3K0
发布2019-09-02 16:43:37
举报
文章被收录于专栏:IT码农IT码农

1、Cookie

Yii2的Cookie主要是通过yii\web\Requestyii\web\Response进行操作的 ,通过\Yii::$app->response->getCookies()->add()添加Cookie,通过\Yii::$app->request->cookies读取Cookie.

1)添加一个Cookie

代码语言:javascript
复制
<?php
//第一种方法
$cookie = new \yii\web\Cookie();
$cookie -> name = 'smister';        //cookie的名称
$cookie -> expire = time() + 3600;	   //存活的时间
$cookie -> httpOnly = true;		   //无法通过js读取cookie
$cookie -> value = 'cookieValue';	   //cookie的值

\Yii::$app->response->getCookies()->add($cookie);

//第二种方法
$cookie = new \yii\web\Cookie([
    ‘name’ => ‘smister’,
    ‘expire’ => time() + 3600,
    ‘httpOnly ’ => true,
    ‘value’ => ‘cookieValue’
]);

\Yii::$app->response->getCookies()->add($cookie);
?>

2) 读取一个Cookie

代码语言:javascript
复制
<?php
$cookie = \Yii::$app->request->cookies;

//返回一个\yii\web\Cookie对象
$cookie->get(‘smister’);

//直接返回Cookie的值
$cookie->getValue(‘smister’); //$cookie[‘smister’] 其实这样也是可以读取的

//判断一个Cookie是否存在
$cookie->has(‘smister’);

//读取Cookie的总数
$cookie->count();//$cookie->getCount();跟count一样
?>

3) 删除Cookie

代码语言:javascript
复制
<?php
$cookie = Yii::$app->request->cookies->get(‘smister’);

//移除一个Cookie对象
\Yii::$app->response->getCookies()->remove($cookie);

//移除所有Cookie,目前好像不太好使
\Yii::$app->response->getCookies()->removeAll();
?>

4) 注意

对Cookie进行增删改时调用的response , 对Cookie读取时使用的是Request

2、Session

Yii2的Session比较简单 ,直接通过\Yii::$app->session进行操作就好了

1) 添加一个session

代码语言:javascript
复制
<?php
$session = \Yii::$app->session;
$session->set('smister_name' , 'myname');
$session->set('smister_array' ,[1,2,3]);
?>

2) 读取一个session

代码语言:javascript
复制
<?php
$session = \Yii::$app->session;

//读取一个Session
$session->get('smister_name);
?>

3) 删除Session

代码语言:javascript
复制
<?php
$session = \Yii::$app->session;

//删除一个session
$session->remove(‘smister_name’);

//删除所有session
$session->removeAll();
?>

PHP/Yii2操作Cookie,常见问题以及注意事项

设置Cookie

PHP

setcookie("name", "Larry", time()+3600);

Yii2

代码语言:javascript
复制
$cookies = Yii::$app->response->cookies;
 
$cookies->add(new \yii\web\Cookie([
    'name' => 'name',
    'value' => 'Larry',
    'expire'=>time()+3600
]));

创建名为"name"的cookie,赋值为"Larry",并且规定该cookie一小时后失效

expire这是一个UNIX时间戳,如果设置为0,或省略,该Cookie将在浏览器关闭时消失

获取Cookie

PHP

$name=$_COOKIE["user"]

Yii2

代码语言:javascript
复制
$cookies = Yii::$app->request->cookies;//注意此处是request
$language = $cookies->get('user', 'defaultName');//设置默认值

检查Cookie

PHP

if(isset($_COOKIE["user"])){ }

Yii2

代码语言:javascript
复制
$cookies = Yii::$app->request->cookies;
 
if (isset($cookies['user'])){ }
if ($cookies->has('user')){ }
if (isset($cookies['user'])){ }

删除Cookie

PHP

代码语言:javascript
复制
setcookie("user", "", time()-3600);//把失效日期设置为过去1小时
unset($_COOKIE['user']);
###Yii2
$cookies = Yii::$app->request->cookies;
 
$cookies->remove('user');

常见问题

A.Cookie的key不能含“.” 符号,会被解析成“_”,导致具有以上符号的key获取不到Cookie的bug

B.区分Yii2中 Yii::$app->request->cookiesYii::$app->response->cookies 不仔细容易直接复制粘贴了。

代码语言:javascript
复制
1.如果把第一个用来设置Cookie,会报错:`The cookie collection is read only`

2.如果把第二个用来获取Cookie,程序正常执行未发生异常,但会获取不到Cookie,不容易察觉。。。

C.Cookie的key区分大小写

Yii::$app->request->cookies 和 Yii::$app->response->cookies在yii里面是分开的,前者是客户端(浏览器cookie),后者是服务器端。 所以: Yii::$app->request->cookies主要负责读取 Yii::$app->response->cookies主要负责创建

当然两者可以混用,但是根据业务需要, 取客户端cookie之前,在响应中应该写入或修改 如果两者分不清或者使用错误,那就是程序不OOP 思想不到位

G

M

T

Detect languageAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu

AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu

Text-to-speech function is limited to 200 characters

Options : History : Feedback : Donate

Close

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、Cookie
    • 1)添加一个Cookie
      • 2) 读取一个Cookie
        • 3) 删除Cookie
          • 4) 注意
          • 2、Session
            • 1) 添加一个session
              • 2) 读取一个session
                • 3) 删除Session
                • 设置Cookie
                  • PHP
                    • Yii2
                      • PHP
                        • Yii2
                          • PHP
                            • Yii2
                              • PHP
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档