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 關注
- 333 瀏覽
添加回答
舉報