在CakePHP中更新其他用户的会话

时间:2011-02-15 16:39:37

标签: session authentication cakephp refresh

这是我的CakePHP场景。

我有控制器MembersController,它处理所有用户信息,同时还有login()logout()功能。工作人员可以通过edit功能编辑用户。但是,当工作人员编辑用户时,用户自己的会话不会更新。

我正在寻找一些进入AppController的函数,它将用户会话与相应的数据库条目进行比较。如果存在不匹配(即数据库已更新),我想刷新用户的会话。

我看到很多解决方案在用户编辑自己的详细信息时有效,但在工作人员编辑其他用户详细信息时却没有。

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:6)

嗯,你可以这样做,但你最终会在数据库中找到每个页面请求的用户信息。你最好的选择可能就是这样做。

function _updateUserSession() {
    if ($this->Auth->user()) {
        $user_id = $this->Auth->user($this->User->primaryKey);
        $user    = $this->User->read(null, $user_id);
        $this->Session->write($this->Auth->sessionKey, $user[$this->User->alias]);
    }
}

这将检查用户是否已登录,然后获取其ID(,如primaryKey 所引用),然后从数据库中请求相应的User记录。获得记录后,它会将该信息写入Session所需位置的AuthComponent

答案 1 :(得分:0)

如果您使用数据库,则可以删除用户的会话。 只为当前所有会话创建一个后端。 我使用连接到会话的“online_activities”来跟踪user_id。

假设您已启用(已实施)cookie auth,您可以轻松强制浏览器以这种方式刷新用户会话。用户自己甚至都没注意到。