如何在 CakePHP (2.10) 表会话中存储 user_id?

问题描述 投票:0回答:2

我尝试应用本文中找到的解决方案: 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;
}

有什么帮助吗? 谢谢!

cakephp cakephp-2.0
2个回答
1
投票

试试这个方法:

 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')

0
投票

现在回答已经太晚了,但我找到了根本原因,在

CakePHP 2.10
DatabaseSession
类中,在 write 方法中 make
'callbacks' => false
,所以你可以将其更改为
true
,这样 beforeSave 就会再次调用。

© www.soinside.com 2019 - 2024. All rights reserved.