2015-03-31 69 views
0

我有一个Google App Engine PHP网站。我有一个注册系统,所以用户登录并保存到数据库。只能访问某些设备的网站

我希望能够让用户只能通过2个设备访问。所以如果他们尝试使用第三个设备登录,那么他们将不被允许。例如,用户设备(IP地址或MAC地址或其他)将被保存,并且如果用户尝试使用未保存或与保存的设备凭据不匹配的设备登录,那么为什么会被拒绝访问。

所以为了让用户更清楚(用户名i001),有一部手机和一台笔记本电脑。因此,用户可以在使用手机和笔记本电脑时登录网站,但不能使用其他设备。

有什么办法可以做到这一点吗?

+0

可能将会话信息存储在数据库中?尽管如此,这可能不是完全的傻瓜。 – Maximus2012 2015-03-31 14:37:12

+0

这可能工作。我将如何存储会话中的设备信息? – David 2015-03-31 14:47:30

+0

我相信你可以使用$ _SERVER和$ _SESSION超全局数组来获得用户/设备信息的独特组合。 $ _SERVER会给你客户端的浏览器和IP地址:http://php.net/manual/en/reserved.variables.server.php。我不认为你可以得到MAC地址,并不认为你甚至需要这个。 – Maximus2012 2015-03-31 14:50:58

回答

1

我有一个问题simliar和Symfony的2下列方式处理它:

每个用户都有登录在同一时间的最大金额,为您的情况下,我们采取2.我也有现在有一个字段用于证明有多少登录是免费的。

因此,我们有以下数据库:

maxLogins|loginsFree 
2  |2 

随着每一次登录,用户ID,会话ID和登录的日期时间将被保存到数据库中。在登录过程中,loginsFree列将被减少。

因此,我们有以下几点:

//After Login 
maxLogins|loginsFree 
2  |1 

的逻辑很简单,以限制登录

if($freeLogins == 0){ 
    //give out an message or something 
} else { 
    //do your login 
} 

内的访问,如果用户登录你的系统,loginsFree将增加1。

//After Logout 
maxLogins|loginsFree 
2  |2 

重要

您不能通过maxLogins值增加loginsFree值,否则用户可以更频繁地登录,然后同时登录2次。

另外,因为我通过会话解决了这个问题,所以我需要一个在闲置一段时间后无效会话的进程。那些无效的会话也必须增加loginsFree的值,因为他们取消了登录。

+0

谢谢你的详细解释。这就说得通了。你的数据库有多少个字段?像你的数据库表是什么样子? – David 2015-03-31 15:25:47

+0

@David我的数据库保存了会话ID,用户ID和上次活动的时间,这些活动将由用户在此会话中进行的每个活动更新。如果上次活动的日期时间较早,则在给定时间会话将失效 – KhorneHoly 2015-04-01 06:49:51

相关问题