在 CakePHP 中远程删除用户会话

Deleting user sessions remotely in CakePHP

在我的 CakePHP 2.4 应用程序(使用 AuthComponent)中,我的用户模型上有一个 banned 字段,它禁止用户。如果用户尝试登录,它会检查该字段,如果他们被禁止,他们会收到错误消息。

但是,这不适用于当前登录的用户。 如何远程破坏用户的会话,从而将他们注销?

理论上,这可能是我可以放入的逻辑 beforeSave:

public function beforeSave(){
    if($this->data['banned'] == 1){
        // Logic to destroy session goes here
    }
    return true;
}

您需要为会话使用数据库:http://book.cakephp.org/2.0/en/development/sessions.html#database-sessions

然后在用户模型的回调或信号 beforeSave 上,您需要以某种方式找出被禁止用户的会话 ID,然后将其删除或清除该特定条目的会话值。

就我而言,我的用户 ID 5d76xxxx 和 JSON 结构如下所述

s:2:"id";s:8:"5d76xxxx"

先获取会话ID:

SELECT * FROM cake_sessions where data like '%s:2:"id";s:8:"5d76xxxx"%'

然后更新或删除它

UPDATE cake_sessions SET data = '' where id = 'e24a2120ff67fxxxxxxd7946f4e3'

我希望你明白逻辑!

可以在AppController的beforeFilter中查看用户的banned字段

代码可能是这样的

$user = ClassRegistry::init('User');

$userId=$this->Auth->user('id');
$userInfo=$user->findById($userId);
if($userInfo['banned'] == 1){
$this->redirect($this->Auth->logout());
    }