zoukankan      html  css  js  c++  java
  • yiiaseInvalidCallException The cookie collection is read only.

    Invalid Call – yiiaseInvalidCallException

    The cookie collection is read only.

    在使用Yii2进行cookie操作时会报以上错误多半是使用了如下的方式来获取cookie容器而导致的

    $cookieObj = Yii::$app->request->cookies;

    处理方式有两种:

    第一种方式,设置readOnly属性为false:
    处理方式为:

    $cookieObj->readOnly = false; //关闭只读保护

    第二种方式,使用response来实例化cookie容器

    $cookie = Yii::$app->response->cookies;
    $cookie->add(new Cookie([
    'name' => 'goods_cart',
    'value' => '100'
    ]));


    导致这个问题的原因是request和response实例化的容器中的readOnly属性的值不同,分别打印的结果如下:

    $cookieObj = Yii::$app->request->cookies;
    var_dump($cookieObj);


    $cookie = Yii::$app->response->cookies;
    var_dump($cookie);exit;


    object(yiiwebCookieCollection)#56 (2) { ["readOnly"]=> bool(true) ["_cookies":"yiiwebCookieCollection":private]=> array(1) { ["_csrf-frontend"]=> object(yiiwebCookie)#63 (7) { ["name"]=> string(14) "_csrf-frontend" ["value"]=> string(32) "JE6d52sN6RdCai-RNDGVYrfpKQ1p0W5_" ["domain"]=> string(0) "" ["expire"]=> NULL ["path"]=> string(1) "/" ["secure"]=> bool(false) ["httpOnly"]=> bool(true) } } }

    object(yiiwebCookieCollection)#65 (2) { ["readOnly"]=> bool(false) ["_cookies":"yiiwebCookieCollection":private]=> array(0) { } }


    可以看到response默认为true这也是为了cookie安全考虑一个为有加密的值。

  • 相关阅读:
    java之数组使用以及拓展
    Java之数组介绍
    方法
    break&continue
    networkmanager is not running 网络管理没有运行
    CentOS-7修改IP
    操作系统
    计算机基础理论
    编码和解码
    pyQuery库
  • 原文地址:https://www.cnblogs.com/bluealine/p/11339006.html
Copyright © 2011-2022 走看看