四十五、逐行阅读Yii2.0.43_Yii框架文件yii\web\Request.php(12)

本文介绍了两个PHP方法,用于处理Cookie。`getCookies()`方法返回一个Cookie集合,而`loadCookies()`则将`$_COOKIE`全局变量转换为Cookie对象数组。在转换过程中,如果启用了Cookie验证,会进行数据验证并使用加密密钥。若验证失败或数据不合法,则忽略该Cookie。
摘要由CSDN通过智能技术生成

1. getCookies方法,返回cookie的集合

    // 返回cookie集合
    public function getCookies()
    {
        if ($this->_cookies === null) {
            $this->_cookies = new CookieCollection(
                $this->loadCookies(),
                [
                    'readOnly' => true,
                ]
            );
        }

        return $this->_cookies;
    }

2. loadCookies方法,转化$_COOKIE为Cookie对象的数组

    // 转化$_COOKIE为一个Cookie对象数组
    protected function loadCookies()
    {
        $cookies = [];
        if ($this->enableCookieValidation) {
            // secret key
            if ($this->cookieValidationKey == '') {
                throw new InvalidConfigException(
                    get_class($this) . '::cookieValidationKey must be configured with a secret key.'
                );
            }
            
            foreach ($_COOKIE as $name => $value) {
                if (!is_string($value)) {
                    continue;
                }
                
                //验证cookie
                $data = Yii::$app->getSecurity()->validateData($value, $this->cookieValidationKey);
                if ($data === false) {
                    continue;
                }
                
                if (defined('PHP_VERSION_ID') && PHP_VERSION_ID >= 70000) {
                    $data = @unserialize($data, ['allowed_classes' => false]);
                } else {
                    $data = @unserialize($data);
                }
                
                if (is_array($data) && isset($data[0], $data[1]) && $data[0] === $name) {
                    $cookies[$name] = Yii::createObject([
                        'class' => 'yii\web\Cookie',
                        'name' => $name,
                        'value' => $data[1],
                        'expire' => null,
                    ]);
                }
            }
        } else {
            foreach ($_COOKIE as $name => $value) {
                $cookies[$name] = Yii::createObject([
                    'class' => 'yii\web\Cookie',
                    'name' => $name,
                    'value' => $value,
                    'expire' => null,
                ]);
            }
        }

        return $cookies;
    }

总结:

 阅读了2个方法:

  • getCookies方法,返回cookie的集合
  • loadCookies方法,转化$_COOKIE为Cookie对象的数组
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值