PHP/Yii2操作Cookie,常见问题以及注意事项
设置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', 'defaultValue');
检查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');
常见问题
-
Cookie
的key
不能含“.” 符号,会被解析成_
,导致具有以上符号的key
获取不到Cookie
的bug -
区分
Yii2
中Yii::$app->request->cookies
和Yii::$app->response->cookies
不仔细容易直接复制粘贴了。1.如果把第一个用来设置
Cookie
,会报错:The cookie collection is read only
2.如果把第二个用来获取
Cookie
,程序正常执行未发生异常,但会获取不到Cookie
,不容易察觉。。。 Cookie
的key
区分大小写