在CakePHP中远程删除用户会话

时间:2015-02-17 19:02:11

标签: php session cakephp

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

但是,这对当前登录的用户不起作用。 如何远程销毁用户'会话,从而将它们记录下来?

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

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

2 个答案:

答案 0 :(得分:3)

您需要将数据库用于会话: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其中数据如'%s:2:“id”; s:8:“5d76xxxx”%'

然后更新或删除

  

更新cake_sessions SET data =''其中id ='e24a2120ff67fxxxxxxd7946f4e3'

我希望你有逻辑!

答案 1 :(得分:1)

您可以在AppFtroller的beforeFilter中检查用户的禁止字段

代码可能是这样的

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

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