session - 如何使用 CakePHP 3 将用户限制为一个 session ?

标签 session cakephp

我的身份验证工作正常。用户可以登录和退出,没问题。问题是,如果用户共享一个登录名,他们可以与一个用户同时登录。不好。

我需要让 CakePHP 知道用户何时登录,我假设这是一个开始使用的进程:

'Session' => [
    'defaults' => 'database'
]

根据 Sessions书页。

到时候我就迷路了。除非我错过了它,否则没有提到将用户限制为每个事件 session 。以前有没有人遇到过这个问题,如果有,你是如何解决的?

为了清楚:

从数据库中删除的所有 session 和在浏览器中删除的所有 cookie = 在访问/users/login 页面时都没有设置(顺便说一句,这已根据教程进行设置 - 没什么特别的)。

登录 = 在 db 中设置的 session ,ID 对应于浏览器中的 cookie。正是您所期望的。

注销(然后重定向回登录)= 旧 session 已删除,然后由 DB 和 cookie 中的另一个 session 替换。不同的身份证。所以有些东西正在拿起过期的cookie并刷新它。唔。

cookie 中保存的信息只是 session ID。在数据库中,它很简单:

session ID |一个 Blob |到期时间

最佳答案

我假设你保存了 userssessions在数据库中(在 cakePHP 中默认命名为 sessions )。

添加 active_session字段,在登录时更新它,在请求时检查它以确保当前用户 session ID 与存储在数据库中的最后一个匹配。

在登录操作时:

UPDATE `users` SET `active_session`='$session_id';

当用户转到需要登录的页面时,您可以搜索该值:
SELECT * FROM `users` WHERE `active_session` = '$session_id';

如果用户在其他地方登录,则先前的 session key 将被覆盖,并且上面的 SELECT 返回一个空的结果集。

可以在更新之前清除旧 session token ,因此旧 session 将按用户销毁。

小心,如果您使用 AuthComponent ,它可能会轮换 session 本身,有关更多信息,您可以在 the corresponding section of CakePHP manual 中找到.

我肯定会去 AuthComponent -way ,并且不会在 CakePHP 中重新发明轮子。

关于session - 如何使用 CakePHP 3 将用户限制为一个 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35482038/

相关文章:

mysql - 休眠的 mysql 进程不清除

MySQL查询只拉取最新记录

PHP session 在子域之间重置

c# - Powershell 通用 session 并在 Exchange 远程管理 session 中导入此 session

php - 这是一个适当的登录和注册加密系统

php - 在 CakePHP 中,是否可以全局设置传递给 Form helper create 方法的选项?

java - Spring MVC中如何维护 session ?

Python Web Scraping 使用验证码登录

CakePHP:绑定(bind)模型不起作用

cakephp - 如何控制 CakePHP 表单中错误消息 div 的显示位置?