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,则删除最旧的令牌以匹配计数。
每当发出请求时,检查表中是否存在令牌。如果没有,那么您的用户根本就没有登录。由于该表的轻量级特性,在响应时间方面不应察觉到查找。
TA贡献1798条经验 获得超3个赞
您可以使用会话并检查用户拥有的当前会话数,如果大于 3,则拒绝登录。
但是,如果您希望有一个生命周期限制,您可以为每个设备设置一个带有 uuid 的 cookie,并且限制为 3,只是有一个非常长的 cookie 生命周期并在每次用户登录时重置生命周期。
TA贡献1906条经验 获得超3个赞
要获取MAC 地址,我们使用 exec() 函数。
$macAddr = exec('getmac');
为了获取IP 地址,我们必须Illuminate\Http\Request;
在控制器中包含 use ,然后添加以下 pre 标记的代码。它将给出网络的 AP 地址。
$ipAddr=\Request::ip();
- 3 回答
- 0 关注
- 293 浏览
添加回答
举报