我有一个辅导网站,用户可以以辅导员或学生的身份加入。该站点位于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地址?这样做合法吗?请帮忙。
谢谢。
答案 0 :(得分:2)
您实际上想解决的问题并不像听起来那样简单,并且按MAC地址访问也不是一个好主意。
首先,了解有关整个MAC地址的一些事实:
因此,老实说,它不是最好的判别方法。乔希建议了一个,我会建议另一个。
无论您身在何处,都可以在用户存储中添加存储阵列的功能。在大多数关系数据库中(如果您正在使用它),它将以附加表的形式出现。轻松搜索与用户对应的条目。
为简单起见,这里是个主意。这是您的用户表:
+---------------------------------------------------+
| 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();