Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在CakePHP中远程删除用户会话_Php_Session_Cakephp - Fatal编程技术网

在CakePHP中远程删除用户会话

在CakePHP中远程删除用户会话,php,session,cakephp,Php,Session,Cakephp,在我的CakePHP2.4应用程序(使用AuthComponent)中,我的用户模型上有一个banked字段,它禁止用户。如果用户尝试登录,它会检查该字段,如果被禁止,则会出现错误 但是,这不适用于当前登录的用户如何远程销毁用户会话,从而将其注销? 理论上,这可能是我在保存之前可以输入的逻辑: public function beforeSave(){ if($this->data['banned'] == 1){ // Logic to destroy sessi

在我的CakePHP2.4应用程序(使用AuthComponent)中,我的用户模型上有一个
banked
字段,它禁止用户。如果用户尝试登录,它会检查该字段,如果被禁止,则会出现错误

但是,这不适用于当前登录的用户如何远程销毁用户会话,从而将其注销?

理论上,这可能是我在保存之前可以输入的逻辑:

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

您需要将数据库用于会话:

然后在用户模型的callback或signal
beforeSave
之前,您需要找出被禁止用户的会话id,然后将其删除或清除该特定条目的会话值

在我的例子中,我有用户id
5d76xxxx
和JSON结构,如下所述

s:2:“身份证”;s:8:“5d76xxxx”

首先获取会话ID:

选择*FROM
cake_sessions
where数据,如“%s:2:id”;s:8:“5d76xxxx”%”

然后更新或删除它

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


我希望你明白逻辑

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

代码可能是这样的

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

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

我不熟悉CakePHP,但假设它使用的是普通的PHP会话系统,则需要删除磁盘上的会话文件。或者,您可以在每次从数据库加载用户时检查该用户是否被禁止。请不要直接实例化模型,这是不允许的!使用
Controller::loadModel()
ClassRegistry::init()
@FazalMohammad无需再次搜索用户,因为有关该用户的所有数据都可以通过
$this->Auth->user()
获得,正如我在下面的回答中所写的那样。@Salines由于需要从数据库中检索禁止的字段值,您不能在会话中使用包含Auth的用户信息。因为会话用户信息具有回溯禁止值($userInfo['banked']==0)你是对的,我完全忘记了这个事实。我道歉。我太累了,无法正常思考。我可以在没有数据库会话的情况下实现它?不,不知何故,您需要跟踪会话id和用户id映射,以便使用它可以删除或清除特定用户id的会话。如果要删除会话,您可以通过从cake_会话中删除数据(如“%s:2:”id);s:8:“5d76xxxx”%”