PHP/Yii2 操作 Cookie 常见问题以及注意事项 [ 2.0 版本 ]
设置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,不容易察觉。。。
C.Cookie的key区分大小写
KilluaCHEN 上海
注册时间:2015-01-09
最后登录:2019-12-30
在线时长:20小时56分
最后登录:2019-12-30
在线时长:20小时56分
- 粉丝16
- 金钱994
- 威望65
- 积分1844
共 5 条评论
Yii::$app->request->cookies
和Yii::$app->response->cookies
在 Yii 里面是分开的,前者是客户端(浏览器cookie),后者是服务器端。所以:
Yii::$app->request->cookies //主要负责读取 Yii::$app->response->cookies //主要负责创建
当然两者可以混用,但是根据业务需要,
取客户端cookie之前,在响应中应该写入或修改
如果两者分不清或者使用错误,那就是程序不OOP
思想不到位
没有人纳闷,cookies 没有 set 方法么?
有 GET, REMOVE, ADD,就是没有 SET,然后每次都是 ADD 么?
同问~
cookie的path一般怎么设置?(已经找到了)
mark,随后看看
add cookie后,发送怎么操作呢