为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
海绵宝宝撒 2021-12-24 10:13:06
我有一个辅导网站,用户可以在其中以导师或学生的身份加入。该站点位于 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 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

您实际尝试解决的问题并不像听起来那么简单,而且通过 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,则删除最旧的令牌以匹配计数。


每当发出请求时,检查表中是否存在令牌。如果没有,那么您的用户根本就没有登录。由于该表的轻量级特性,在响应时间方面不应察觉到查找。


查看完整回答
反对 回复 2021-12-24
?
呼如林

TA贡献1798条经验 获得超3个赞

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

但是,如果您希望有一个生命周期限制,您可以为每个设备设置一个带有 uuid 的 cookie,并且限制为 3,只是有一个非常长的 cookie 生命周期并在每次用户登录时重置生命周期。


查看完整回答
反对 回复 2021-12-24
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

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

$macAddr = exec('getmac');

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

$ipAddr=\Request::ip();


查看完整回答
反对 回复 2021-12-24
  • 3 回答
  • 0 关注
  • 293 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信