问题描述
在CakePHP 4.0中
当我尝试执行$this->Auth->setUser($user)
时,出现此错误:
\ cakePHP \ cakePHP \ src \ Http \ Session.PHP-参数1传递给 Cake \ Http \ Session :: _ overwrite()必须是受保护的数组类型 函数_overwrite(array&$ old,array $ new):无效
这是我的代码:
$user = $this->Auth->identify();
if ($user) {
$this->Auth->setUser($user);
}
当我尝试var_dump($user)
时,其中包含用户详细信息。
请帮助我,因为$ user不是数组,我无法传递数组
解决方法
此问题既不是由于先前生成的某些输出(在我的情况下为警告)也不是会话的其他错误配置引起的。 当您仔细查看Session.php尤其是write()方法时,您会看到以下部分代码:
if (!$this->started()) {
$this->start(); //this may result in false but cakephp ignores it here...
}
$this->_overwrite($_SESSION,$data); //will fail for no session_start() has been invoked yet
因此,即使您的会话尚未启动,脚本也会进一步处理,这将导致您出现错误消息。 因此,请检查您是否可以通过此认证:
if (ini_get('session.use_cookies') && headers_sent()) {
//error headers already send
}
只要您不通过它,就无法将任何数据写入会话