这是我的CakePHP场景。
我有控制器MembersController
,它处理所有用户信息,同时还有login()
和logout()
功能。工作人员可以通过edit
功能编辑用户。但是,当工作人员编辑用户时,用户自己的会话不会更新。
我正在寻找一些进入AppController的函数,它将用户会话与相应的数据库条目进行比较。如果存在不匹配(即数据库已更新),我想刷新用户的会话。
我看到很多解决方案在用户编辑自己的详细信息时有效,但在工作人员编辑其他用户详细信息时却没有。
非常感谢你的帮助!
答案 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,您可以轻松强制浏览器以这种方式刷新用户会话。用户自己甚至都没注意到。