yii的cookie操作被封装在 cookieCollection cookie集合里
通过集合里的操作有基本的增删查改操作(有序Cookie集合实现了arrayAccess接口,所以也能用数组)
$cookies = Yii::$app->response->cookies;
$cookies->add(new Cookie(['name'=>'123456','value'=>'sadasd']));
$cookies->remove('1234');
echo $cookies->getValue("123456");
$cookie = Yii::$app->request->cookies;
// $cookie->add(new Cookie(['name'=>'123456','value'=>'12345']));
需要注意的是 在request里实现的cookies是只读的方式,所以只能实现cookie的读操作,如果用其他操作会报错
他的载入代码
public function getCookies()
{
if ($this->_cookies === null) {
$this->_cookies = new CookieCollection($this->loadCookies(), [
'readOnly' => true,//在这里写的只可读
]);
}
return $this->_cookies;
}
另外值得注意的是我们在设置cookie时我们会执行一次加密操作。
假如你用js写cookie
时我用$cookies->getValue("123456")
读取时我读取不了。
因为我读取时我会按照我的加密原则进行解码
所以我们必须先执行
//在读取其他方式设置的cookie时先关闭我们的解码操作
Yii::$app->request->enableCookieValidation= false;
//要记得关闭之后再开启
Yii::$app->request->enableCookieValidation= true;
这个方法只在 request里有,response里是没有的,所以我们读取cookie时最好是用Request组件里的读取操作