Yii2.0中Cookie与Session的常用操作方法

Dylan
Dylan
发布时间:2026-10-13 | 5人浏览过
原创

本文详细介绍在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教程的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表