Yii2操作Cookie,添加/读取/删除/验证
Yii使用 yii\web\Cookie对象来代表每个cookie,这里要注意yii\web\Request 和 yii\web\Response 的使用方法, 前者的cookie 集合代表请求提交的cookies,用于使用cookie, 后者的cookie集合表示发送给用户的cookies,用于添加时
添加 Cookies
$cookies = Yii::$app->response->cookies; //注意为response
//添加新cookie
$cookies->add(new \yii\web\Cookie([ ’name’ => ’language’, ’value’ => ’zh-CN’, ]));
除了上述例子定义的 name 和 value 属性, yii\web\Cookie 类还定义了其他属性来实现cookie的各种信息,如 domain,expire.
注: 为安全起见yii\web\Cookie::httpOnly 被设置为true, 这可减少客户端脚本访问受保护cookie(如果浏览器支持)的风险.
读取 Cookies
$cookies = Yii::$app->request->cookies;//注意为request
// 方法一
$language = $cookies->getValue(’language’, ’en’); //如果不存在,则返回值 en
// 方法二
if (($cookie = $cookies->get(’language’)) !== null) {
$language = $cookie->value;
}
// 方法三 将 $cookies当作数组使用
if (isset($cookies[’language’])) {
$language = $cookies[’language’]->value;
}
// 判断是否存在名为"language" 的 cookie
if ($cookies->has(’language’)) ...
if (isset($cookies[’language’])) ...
删除 Cookies
$cookies->remove(’language’);
或
unset($cookies[’language’]);
验证 Cookies
给config/main.php设置cookie参数, 哈希字符串, 如果服务端cookie的在客户端被修改,则通过request
组件的yii\web\Request::cookies集合访问不到该cookie。
Cookie验证只保护cookie值被修改,如果一个cookie验证失败, 仍然可以通过$_COOKIE
来访问该cookie.直接通过$_COOKIE
和 setcookie()
读取和发送的Cookie不会被验证。
Cookie验证默认启用,可以设置yii\web\Request::enableCookieValidation属性为false禁用验证.
return [
’components’ => [
’request’ => [
’cookieValidationKey’ => ’dshgwinagriegierognfidkogme3’,
],
],
];