我的身份验证工作正常。用户可以登录和退出,没问题。问题是,如果用户共享一个登录名,他们可以与一个用户同时登录。不好。
我需要让 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 |到期时间
最佳答案
我假设你保存了 users
和 sessions
在数据库中(在 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/