11. Yii 2.0 Cookie

来源:互联网 发布:vb语言基础常见语句 编辑:程序博客网 时间:2024/06/06 02:31
以 Yii 2.0 基础版为例来介绍 Yii 中是如何处理 cookie 的,高级版类似。
Yii 2.0 中对  cookie 进行了封装,类文件为 /basic/vendor/yiisoft/yii2/web 目录下的 Cookie.php 和 CookieCollection.php,一般我们会在此基础上对 cookie 进行二次封装。

在自定义组件目录 /basic/components 下新建一个类文件 CookieHelper.php,来对 cookie 进行二次封装,代码如下:
  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
<?php
namespace app\components;
use yii\web\Cookie;
class CookieHelper
{
/**
* 写入数据(新增或者更新)
*/
public static function set($key, $value, $expire=0)
{
$cookie = new Cookie();
$cookie->name = $key; // cookie的名称
$cookie->value = $value; // cookie的值
if ($expire) {
$cookie->expire = time() + $expire; // cookie的有效期,默认直到浏览器会话关闭
} else {
$cookie->expire = 0;
}
// 响应给浏览器客户端(写入cookie)
\Yii::$app->response->cookies->add($cookie);
}
/**
* 获取数据(返回的是一个对象)
*/
public static function get($key)
{
// 从浏览器客户端请求cookie(读取cookie)
return \Yii::$app->request->cookies->get($key);
}
/**
* 获取数据(返回具体的值)
*/
public static function getValue($key, $defaultValue=NULL)
{
// 从浏览器客户端请求cookie(读取cookie)
return \Yii::$app->request->cookies->getValue($key, $defaultValue);
}
/**
* 删除数据(删除单个cookie)
*/
public static function del($key)
{
\Yii::$app->response->cookies->remove($key);
}
/**
* (注意:该方法并不能删除客户端中的cookie)
* 撤消当前连接中对 cookie 的所有更改,即让客户端的cookie保持不变。
*/
public static function cancelAll()
{
\Yii::$app->response->cookies->removeAll();
}
}
 来自CODE的代码片
snippet_file_0.php
然后,在控制器层,新增一个控制器 CookieController.php,用于测试,代码如下:
  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
<?php
namespace app\controllers;
use yii\web\Controller;
use app\components\CookieHelper;
class CookieController extends Controller
{
public function actionIndex()
{
CookieHelper::set('username', 'xiaoming', 60*30); // 写入cookie
}
public function actionGet()
{
$usernameObj = CookieHelper::get('username');
$username = CookieHelper::getValue('username'); // 获取指定cookie的值
var_dump($usernameObj, '<hr>', $username);
}
public function actionDel()
{
CookieHelper::del('username'); // 删除指定的cookie
// CookieHelper::cancelAll(); // 撤消前面的代码对cookie的所有操作
}
}
 来自CODE的代码片
snippet_file_0.php
在浏览器地址栏输入下面的地址,进行测试:
http://basic.com/cookie/index
http://basic.com/cookie/get
http://basic.com/cookie/del

说明:
\Yii::$app->response 和 \Yii::$app->request 下的 cookies 都是 CookieCollection 对象。区别在于:
\Yii::$app->response 下的 CookieCollection 对象 的 readOnly 属性的值为 false,该对象用于写操作。
\Yii::$app->request 下的 CookieCollection 对象 的 readOnly 属性的值为 true,该对象用于读操作。
原创粉丝点击