我尝试应用本文中找到的解决方案: https://thomasv.nl/2015/09/cakephp-2-8-x-storing-sessions-in-the-database-revisited/
但是在 CakePHP 2.10 中,回调方法似乎在我的自定义会话模型上根本不起作用。我无法将“user_id”存储在会话表中。
即使 afterDelete 或任何其他回调也不起作用。例如,如果我在 beforeSave 末尾插入“return false”,它仍然保存在数据库中!
这是自定义会话模型中的代码:
public function beforeSave($options = array()) {
$this->data[$this->alias]['user_id'] = AuthComponent::user('id');
return true;
}
有什么帮助吗? 谢谢!
试试这个方法:
public function beforeSave($options = array()) {
$this->data[$this->alias]['user_id'] = CakeSession::read("Auth.User.id");
return true;
}
请注意,这仅适用于 CakePHP 2.x - 应避免。通常,您将需要的会话数据传递到模型层。在 3.x 中,你不能再静态访问会话,因此你肯定需要将数据传递到模型层。
确保您已在 Filter() 之前调用了控制器父级;
public function beforeFilter(){
parent::beforeFilter();
}
确保您已将其添加到模型文件的顶部:
App::uses('CakeSession', 'Model/Datasource')
现在回答已经太晚了,但我找到了根本原因,在
CakePHP 2.10
的 DatabaseSession
类中,在 write 方法中 make 'callbacks' => false
,所以你可以将其更改为 true
,这样 beforeSave 就会再次调用。