Yii2.0中Cookie与Session的常用操作方法
本文详细介绍在Yii2.0框架中如何利用内置API进行操作Cookie和Session,包括创建、读取及删除的具体实现方式。
Cookie操作
在Yii2中,Cookie的数据读写主要依赖于 yii\web\Request 和 yii\web\Response 类。获取数据通常使用 $this->request->cookies,而设置或删除则需要调用 $this->response->cookies。
第1步:创建并写入Cookie
可以使用构造器参数或单独赋值的方式定义 yii\web\Cookie 对象,最后通过响应对象添加:
<?php
// 获取响应对象的 Cookies 集合
$cookies = Yii::$app->response->cookies;
// 创建一个新Cookie对象
$cookie = new yii\web\Cookie([
'name' => 'smister',
'value' => 'cookieValue',
'expire' => time() + 3600, // 有效期(秒)
'httpOnly' => true, // 防止JS访问,提升安全
]);
// 将其添加到响应中
$cookies->add($cookie);
?>
参数说明: expire 为Unix时间戳;httpOnly 设为true可增强安全性。
第2步:读取Cookie信息
通过请求对象获取指定的Cookie值:
<?php
// 获取整个Cookie集合实例
$cookies = Yii::$app->request->cookies;
// 获取特定名称的Cookie对象 (返回 yii/web/Cookie)
$cookieObj = $cookies->get('smister');
$val1 = $cookieObj ? $cookieObj->value : null;
// 直接获取值 (默认返回null或设定的defaultValue)
$val2 = $cookies->getValue('smister');
// 检查Cookie是否存在
if ($cookies->has('smister')) {
echo 'Cookie存在';
}
?>
第3步:删除Cookie
需从响应的Cookie集合中移除。对于已存在于浏览器的Cookie,可以通过将 expire 设置为过去的时间来让浏览器自动清除:
<?php
// 获取要删除的Cookie对象
$cookie = Yii::$app->request->cookies->get('smister');
// 从发送端移除(针对下次请求不生效)
Yii::$app->response->cookies->remove($cookie);
// 如果希望强制浏览器端过期,可以这样处理:
//$deletedCookie = clone $cookie;
//$deletedCookie->expire = time() - 1;
//Yii::$app->response->cookies->add($deletedCookie);
?>
注意: 每次操作增删时都应确保是在 $response->cookies 上执行。
Session操作
Yii2提供了统一的会话控制接口 $this->session。使用前建议开启Session: Yii::$app->session->open() 。
第1步:保存Session数据
将变量存入Session,支持字符串、数组等多种类型:
<?php
$session = Yii::$app->session;
// 保存单个键值对
$session->set('user_name', 'myname');
// 也可以直接使用数组赋值的方式(底层机制类似)
$session['score'] = [1, 2, 3];
?>
第2步:获取Session数据
根据Key读取之前存储的数据:
<?php
$name = $session->get('user_name');
$scores = $session['score'];
?>
第3步:销毁Session数据
删除特定的会话项或清空整个会话:
<?php
$session = Yii::$app->session;
// 删除指定键的值
$session->remove('user_name');
// 删除所有Session并结束当前会话
$session->destroy(); // 推荐用于注销场景
?>
以上就是Yii2.0中的COOKIE和SESSION详细用法,更多关于Yii教程的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













