KilluaCHEN 2015-06-28 11:51:26 51453次浏览 5条评论 28 15 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->cookiesYii::$app->response->cookies 不仔细容易直接复制粘贴了。

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

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

C.Cookie的key区分大小写

原文地址http://www.larry666.com/index.php?r=post/view&id=2

觉得很赞
  • 评论于 2015-11-27 11:30 举报

    Yii::$app->request->cookiesYii::$app->response->cookies 在 Yii 里面是分开的,前者是客户端(浏览器cookie),后者是服务器端。
    所以:

    Yii::$app->request->cookies //主要负责读取
    Yii::$app->response->cookies //主要负责创建
    

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

    , 觉得很赞
  • 评论于 2016-01-09 12:10 举报

    没有人纳闷,cookies 没有 set 方法么?

    有 GET, REMOVE, ADD,就是没有 SET,然后每次都是 ADD 么?

    1 条回复
    评论于 2017-08-09 21:19 回复

    同问~

  • 评论于 2016-08-27 20:31 举报

    cookie的path一般怎么设置?(已经找到了)

  • 评论于 2017-05-22 19:04 举报

    mark,随后看看

  • 评论于 2017-12-04 09:49 举报

    add cookie后,发送怎么操作呢

您需要登录后才可以评论。登录 | 立即注册