【问题标题】:Website only accessible to certain devices网站只能由某些设备访问
【发布时间】:2015-06-04 22:27:14
【问题描述】:

我有一个 Google App Engine PHP 网站。我有一个注册系统,所以用户登录并保存到数据库中。

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

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

有没有办法让这成为可能?

【问题讨论】:

  • 可能将会话信息存储在数据库中?不过,这可能并不完全是万无一失的。
  • 这可能行得通。我将如何存储会话中的设备信息?
  • 我相信您可以使用 $_SERVER 和 $_SESSION 超全局数组来获得用户/设备信息的独特组合。 $_SERVER 将为您提供客户端的浏览器和 IP 地址:php.net/manual/en/reserved.variables.server.php。我认为您无法获取 MAC 地址,并且认为您甚至不需要它。
  • 嗯..你知道获取IP等详细信息的PHP Server代码吗?
  • $_SERVER['REMOTE_ADDR']。 172票看答案:stackoverflow.com/questions/3003145/…

标签: php html session web


【解决方案1】:

我有一个类似的问题,并在 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

重要

您不能将 loginsFree 值增加到超过 maxLogins 值,否则用户可能会同时登录超过 2 次。

另外,因为我用会话解决了这个问题,所以我需要一个在一段时间不活动后会使会话无效的进程。那些失效的会话也必须增加 loginsFree 值,因为它们取消了登录。

【讨论】:

  • 感谢您的详细解释。这就说得通了。你的数据库有多少个字段?你的数据库表是什么样的?
  • @David 我的数据库保存了 sessionID、userID 和最后一个活动的时间,用户在此会话中执行的每个活动都将更新这些活动。如果上次活动的日期时间较早,则会话将在给定时间失效
猜你喜欢
  • 2010-12-15
  • 2011-01-09
  • 2016-02-18
  • 2012-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-11
  • 2019-05-18
相关资源
最近更新 更多