在CakePHP中远程删除用户会话
在我的CakePHP2.4应用程序(使用AuthComponent)中,我的用户模型上有一个在CakePHP中远程删除用户会话,php,session,cakephp,Php,Session,Cakephp,在我的CakePHP2.4应用程序(使用AuthComponent)中,我的用户模型上有一个banked字段,它禁止用户。如果用户尝试登录,它会检查该字段,如果被禁止,则会出现错误 但是,这不适用于当前登录的用户如何远程销毁用户会话,从而将其注销? 理论上,这可能是我在保存之前可以输入的逻辑: public function beforeSave(){ if($this->data['banned'] == 1){ // Logic to destroy sessi
banked
字段,它禁止用户。如果用户尝试登录,它会检查该字段,如果被禁止,则会出现错误
但是,这不适用于当前登录的用户如何远程销毁用户会话,从而将其注销?
理论上,这可能是我在保存之前可以输入的逻辑:
public function beforeSave(){
if($this->data['banned'] == 1){
// Logic to destroy session goes here
}
return true;
}
您需要将数据库用于会话: 然后在用户模型的callback或signal
beforeSave
之前,您需要找出被禁止用户的会话id,然后将其删除或清除该特定条目的会话值
在我的例子中,我有用户id5d76xxxx
和JSON结构,如下所述
s:2:“身份证”;s:8:“5d76xxxx”
首先获取会话ID:
选择*FROMcake_sessions
where数据,如“%s:2:id”;s:8:“5d76xxxx”%”
然后更新或删除它
更新cake_sessions
SETdata
='',其中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”%”