Cookie允许数据跨请求持久化。在PHP中,可以通过 $_COOKIE 变量访问它们。Yii 中表示 cookie 作为 yii\web\Cookie 类的一个对象。在本章中,我们描述了读取 cookie 的方法。
第1步- 在 SiteController 创建一个动作 actionReadCookies()方法。
public function actionReadCookies() { // get cookies from the "request" component $cookies = Yii::$app->request->cookies; // get the "language" cookie value // if the cookie does not exist, return "Py" as the default value $language = $cookies->getValue('language', 'Py'); // an alternative way of getting the "language" cookie value if (($cookie = $cookies->get('language')) !== null) { $language = $cookie->value; } // you may also use $cookies like an array if (isset($cookies['language'])) { $language = $cookies['language']->value; } // check if there is a "language" cookie if ($cookies->has('language')) echo "Current language: $language"; }
第2步 - 在 SiteController 创建一个名为动作 actionSendCookies ()方法用于发送 cookie 到客户端。
public function actionSendCookies() { // get cookies from the "response" component $cookies = Yii::$app->response->cookies; // add a new cookie to the response to be sent $cookies->add(new \yii\web\Cookie([ 'name' => 'language', 'value' => 'Chinese', ])); $cookies->add(new \yii\web\Cookie([ 'name' => 'username', 'value' => 'Hippo', ])); $cookies->add(new \yii\web\Cookie([ 'name' => 'country', 'value' => 'China', ])); }
第3步 - 现在,打开 http://localhost:8080/index.php?r=site/send-cookies, 你会发现 cookies 已经保存在浏览器内。

在Yii中默认情况下,cookie验证已启用。它保护 cookies 在客户端被别人修改。在 config/web.php 文件使用哈希字符串签名每个 cookie。
<?php $params = require(__DIR__ . '/params.php'); $config = [ 'id' => 'basic', 'basePath' => dirname(__DIR__), 'bootstrap' => ['log'], 'components' => [ 'request' => [ // !!! insert a secret key in the following (if it is empty) - this is //required by cookie validation 'cookieValidationKey' => 'ywfdsa7829347898fLXfsCfdKjfO-fss0', ], 'cache' => [ 'class' => 'yii\caching\FileCache', ], 'user' => [ 'identityClass' => 'app\models\User', 'enableAutoLogin' => true, ], 'errorHandler' => [ 'errorAction' => 'site/error', ], 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', // send all mails to a file by default. You have to set // 'useFileTransport' to false and configure a transport // for the mailer to send real emails. 'useFileTransport' => true, ], 'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning'], ], ], ], 'urlManager' => [ //'showScriptName' => false, //'enablePrettyUrl' => true, //'enableStrictParsing' => true, //'suffix' => '/' ], 'db' => require(__DIR__ . '/db.php'), ], 'modules' => [ 'admin' => [ 'class' => 'app\modules\admin\Admin', ], ], 'params' => $params, ]; if (YII_ENV_DEV) { // configuration adjustments for 'dev' environment $config['bootstrap'][] = 'debug'; $config['modules']['debug'] = [ 'class' => 'yii\debug\Module', ]; $config['bootstrap'][] = 'gii'; $config['modules']['gii'] = [ 'class' => 'yii\gii\Module', ]; } return $config; ?>
可以通过设置 yii\web\Request::$enableCookieValidation 属性为 false。
上一篇:
Yii Cookies
下一篇:
Yii文件上传