如何登录用户的设备物理地址

时间:2019-09-03 07:11:27

标签: php laravel laravel-5 mac-address

我有一个辅导网站,用户可以以辅导员或学生的身份加入。该站点位于Laravel 5.4中。注册后,我想限制单个用户只能从最多三台设备登录。

例如:当前的社交媒体使我们能够灵活地从任何地方和任何设备登录。就我而言。我想限制用户使用前三个设备。 如果用户通过手机,计算机和标签页登录,则他将无法通过任何其他设备登录。

我在php中尝试过,但这只给了我系统或服务器系统的mac地址。

ob_start();
system('ipconfig /all');
$mycom=ob_get_contents();
ob_clean();
$findme = "Physical";
$pmac = strpos($mycom, $findme);
$mac=substr($mycom,($pmac+36),17);
echo $mac;

有什么办法可以获取用户设备的Mac地址?这样做合法吗?请帮忙。

谢谢。

3 个答案:

答案 0 :(得分:2)

您实际上想解决的问题并不像听起来那样简单,并且按MAC地址访问也不是一个好主意。

首先,了解有关整个MAC地址的一些事实:

  • 它们仅显示到网络上的第一跳。一旦有路由设备出现,您将看到的只是该设备的MAC,因为从那时起,所有内容都是路由,而不是桥接
  • 该跳数可以是任何东西,具体取决于距离多远(或网络拓扑有多复杂)-来自ISP的某种路由设备,来自IX的某种路由设备,等等

因此,老实说,它不是最好的判别方法。乔希建议了一个,我会建议另一个。

无论您身在何处,都可以在用户存储中添加存储阵列的功能。在大多数关系数据库中(如果您正在使用它),它将以附加表的形式出现。轻松搜索与用户对应的条目。

为简单起见,这里是个主意。这是您的用户表:

+---------------------------------------------------+
|                        users                      |
+----+----------+---------+------------+------------+
| id | username | enabled | created_at | updated_at |
+----+----------+---------+------------+------------+

我们将创建user_tokens来配合它:

+-------------------------------------------+
|                user_tokens                |
+-------+---------+------------+------------+
| token | user_id | created_at | updated_at |
+-------+---------+------------+------------+

该表应促进给定用户对所有令牌的快速访问,并且令牌在所有用户之间不应唯一,因此,我们将使用(user_id, token)作为复合主键。我们还必须能够删除最旧的令牌,因此您将要添加(user_id, created_at)作为索引。

无论何时有新用户登录,都要创建一个新令牌并将其与会话(或会话替代)一起存储。如果会话数超过N,请删除最早的令牌以匹配计数。

无论何时发出请求,都要检查表中是否存在令牌。如果没有,则根本就不会登录您的用户。由于该表的轻巧性质,因此在响应时间方面应该看不到查找。

答案 1 :(得分:1)

您可以使用该会话并检查用户当前有多少会话,如果会话数大于3,则拒绝登录。

但是,如果您希望有一个生存期限制,则可以为每个设备设置一个带有uuid的cookie,并且将其限制为3,这意味着该cookie的生存期非常长,并在用户每次登录时重置生存期。

可以在此处找到有关客户端的更多信息:Using JavaScript to get users Mac Address

答案 2 :(得分:0)

为了获取MAC地址,我们使用exec()函数。

$macAddr = exec('getmac');

要获取IP 地址,我们必须在控制器中包含使用 Illuminate\Http\Request;,然后添加以下 pre 标记的代码。它将给出网络的 AP 地址。

$ipAddr=\Request::ip();