我有一个问题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的值,因为他们取消了登录。
可能将会话信息存储在数据库中?尽管如此,这可能不是完全的傻瓜。 – Maximus2012 2015-03-31 14:37:12
这可能工作。我将如何存储会话中的设备信息? – David 2015-03-31 14:47:30
我相信你可以使用$ _SERVER和$ _SESSION超全局数组来获得用户/设备信息的独特组合。 $ _SERVER会给你客户端的浏览器和IP地址:http://php.net/manual/en/reserved.variables.server.php。我不认为你可以得到MAC地址,并不认为你甚至需要这个。 – Maximus2012 2015-03-31 14:50:58