Yii2 中cookie的用法(2)

设置Cookie
PHP

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

$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

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

检查Cookie
PHP

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

$cookies = Yii::$app->request->cookies;
 
if (isset($cookies['user'])){ }
if ($cookies->has('user')){ }
if (isset($cookies['user'])){ }

删除Cookie
PHP

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->cookies 和 Yii::$app->response->cookies 不仔细容易直接复制粘贴了。

1.如果把第一个用来设置Cookie,会报错:`The cookie collection is read only`

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

 

posted @ 2017-08-18 15:19  侠岚之弋痕夕  阅读(237)  评论(0编辑  收藏  举报
Where is the starting point, we don't have a choice, but the destination where we can pursue!