yii\base\InvalidCallException The cookie collection is read only.
Invalid Call – yii\base\InvalidCallException
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(yii\web\CookieCollection)#56 (2) { ["readOnly"]=> bool(true) ["_cookies":"yii\web\CookieCollection":private]=> array(1) { ["_csrf-frontend"]=> object(yii\web\Cookie)#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(yii\web\CookieCollection)#65 (2) { ["readOnly"]=> bool(false) ["_cookies":"yii\web\CookieCollection":private]=> array(0) { } }
可以看到response默认为true这也是为了cookie安全考虑一个为有加密的值。
最新文章
- Python Day6
- jquery特效大全
- linux命令:head
- Node.js初探之hello world
- 详解log4j2(下) - Async/MongoDB/Flume Appender 按日志级别区分文件输出
- iOS 内存管理(一)之基础知识介绍
- pthread 学习系列 case1-- 共享进程数据 VS 进程
- MATLAB信号与系统分析(二)——离散时间信号与系统的时域分析
- C# WinForm开发系列 - RDLC
- Oracle 日期查询
- 树状数组的笔记√(hzwer blog)
- HDU 5775 Bubble Sort(线段树)(2016 Multi-University Training Contest 4 1012)
- Leetcode: Spiral Matrix. Java
- COM学习(二)——COM的注册和卸载
- 第一次作业_ChenHong1998
- iframe 和 父窗口传递
- 在html中使用thymeleaf编写通用模块
- maven 创建project
- ES6 WeakMap和WeakSet的使用场景
- Python标准库 -- UUID模块(生成唯一标识)