Das*_*tca 6 authentication cakephp login
我正在使用CakePHP 2.2.1并尝试使用Auth组件改进我的用户身份验证.当用户尝试从多个位置登录时,他们会获得单独的会话ID,我想要做的就是终止旧会话,这样用户就无法同时从多个位置登录.
我转换了CakePHP如何使用这个帖子保存其会话,cakephp阻止用户同时从多个位置登录,但没有回答如何在创建新会话时终止旧会话.
我考虑过创建会话模型并使用它来选择记录,但我不确定这是否是一条安全的路径.
我还阅读了关于Session Component和CakeSession Datasource 的CakePHP文档,希望可能有一个提示,但我找不到任何东西.
任何建议将不胜感激.
通常,您希望将会话处理切换到数据库,因此当您检测到相同的用户使用不同的用户登录时,您可以删除过时的会话session_id
.
步骤,给你一个想法:
将会话处理切换到数据库
Configure::write('Session.save', 'database');
Run Code Online (Sandbox Code Playgroud)创建cake_sessions
表格
cd app
Console/cake schema create Sessions
Run Code Online (Sandbox Code Playgroud)
然后,您将看到以下内容:
Cake Schema Shell
---------------------------------------------------------------
The following table(s) will be dropped.
cake_sessions
Are you sure you want to drop the table(s)? (y/n)
[n] > y
Dropping table(s).
cake_sessions updated.
The following table(s) will be created.
cake_sessions
Are you sure you want to create the table(s)? (y/n)
[y] > y
Creating table(s).
cake_sessions updated.
End create.
Run Code Online (Sandbox Code Playgroud)假设您绑定session_id
到user_id
由
$this->Session->write('user_id', 123456);
Run Code Online (Sandbox Code Playgroud)data
在会话数据库中迭代字段,如果相同的行user_id
进入您的站点并使用不同的行,则删除该行session_id
.
不幸的是,CakePHP存储data
了serialize()
数据.您将不得不遍历cake_sessions
表中的每一行以查找user_id
包含在seralized中的匹配以data
进行删除.
或者,只是为了给您一个想法,您可以使用以下SQL作为删除关联行的近似方法:
DELETE FROM `cake_sessions` WHERE `cake_sessions`.`data` LIKE '%123456%';
Run Code Online (Sandbox Code Playgroud)这样,拥有旧版本的旧用户session_id
将无法以登录用户身份继续访问该网站.
归档时间: |
|
查看次数: |
1977 次 |
最近记录: |