如何使用CakePHP 3将用户限制为一个会话?

时间:2016-02-18 12:52:26

标签: session cakephp

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

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

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

根据Sessions书页。

然后我迷路了。除非我错过了它,否则没有提及将用户限制为每个活动会话。有没有人遇到过这个问题,如果有的话,你是如何解决它的?

要明确:

从DB&中删除所有会话浏览器中删除的所有cookie =访问/ users / login页面时都没有设置(顺便说一下,这已根据教程设置 - 没什么特别的)。

登录=在db中设置会话,其中id对应于浏览器中的cookie。正是你所期待的。

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

Cookie中保存的信息只是会话ID。在DB中它只是:

会话ID |一个blob |到期时间

2 个答案:

答案 0 :(得分:4)

我假设您将userssessions保存在数据库中(默认情况下,在cakePHP中将其命名为sessions)。

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

登录操作:

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

当用户转到需要登录的页面时,您搜索该值:

SELECT * FROM `users` WHERE `active_session` = '$session_id';

如果用户在其他地方登录,则上一个会话密钥将被覆盖,上面的SELECT将返回结果集。

可以在更新之前清除旧会话令牌,这样就可以基于每个用户销毁旧会话。

请注意,如果您使用的是AuthComponent,它可能会自动轮换会话,您可以在the corresponding section of CakePHP manual中找到更多信息。

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

答案 1 :(得分:0)

我将用户绑在手机上。每天他们都会通过twilio短信获得一个新的6位数代码。难以共享登录,但并非不可能。最后,我想跟踪用户每天使用多少台不同的机器并确定一些合理的使用限制。如果用户一天使用三台或四台机器,那很好,但是当他们每天在二十台或五十台机器上开始使用相同的用户ID时,这可能是一个问题。