我通过此代码手动修改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')
代码获取更新值?
答案 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);
}