【问题标题】:The Auth component still fetching older value of Session?Auth 组件仍在获取 Session 的旧值?
【发布时间】:2016-05-15 18:42:13
【问题描述】:

我正在通过此代码在 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') 代码获取更新的值?

【问题讨论】:

    标签: php cakephp cakephp-3.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);
    }
    

    【讨论】:

      猜你喜欢
      • 2013-01-12
      • 2022-12-03
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多