Yii2操作Cookie,添加/读取/删除/验证

时间: 2017-02-15  分类: Yii2  收藏

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.直接通过$_COOKIEsetcookie() 读取和发送的Cookie不会被验证。
Cookie验证默认启用,可以设置yii\web\Request::enableCookieValidation属性为false禁用验证.

return [
    ’components’ => [
        ’request’ => [
            ’cookieValidationKey’ => ’dshgwinagriegierognfidkogme3’,
        ],
    ],
];
分享到:

评论

昵 称: