Auth组件仍然获取较旧的Session值?

时间:2016-05-15 18:42:14

标签: php cakephp cakephp-3.0

我通过此代码手动修改AppController.php的beforeFilter中的一些Auth会话密钥

public function beforeFilter(Event $event){
    //$companyId = $this->Companies->find(.........
    $this->request->session()->write('Auth.User.company_id', $companyId);
}

在不同控制器的各种操作中,我试图通过以下方式将存储的companyid存入会话

public function add(){
    $companyId = $this->Auth->user('company_id');
    debug($companyId); die;
}

当我看到$companyId的值时,它在AppController的beforeFilter方法中显示未更新的旧值。但是,如果我刷新页面并且不再修改会话,我将获得更新$companyId值。

所以我的问题是如何更新Auth会话数据的值,以便我可以在同一请求的不同位置使用$this->Auth->user('company_id')代码获取更新值?

1 个答案:

答案 0 :(得分:1)

身份验证组件使用的会话存储使用缓冲机制,即会话中的值通常每次请求只读取一次(除非它被删除/清空)。

<强> https://github.com/cakephp/cakephp/blob/3.2.8/src/Auth/Storage/SessionStorage.php#L81-L83

因此,要么直接从控制器操作中的会话读取值,要么不直接写入会话,而是写入会话存储,

$user = $this->Auth->user();
if (is_array($user) && $user) {
    $user['company_id'] = $companyId;
    $this->Auth->setUser($user);
}