首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java Web 登入日誌 IP 比對:資料庫記錄優於日誌解析

     編輯:程式設計疑難解答

現狀與問題

需求:登入時比對上次 IP,不同則提示。目前想從文字日誌解析上次 IP。

不推薦:日誌解析

  • 效能差:每次登入掃描/尾部讀取日誌檔,高併發下 I/O 瓶頸。
  • 可靠性低:日誌輪轉、格式變更、多實例部署導致解析失敗。
  • 擴展性差:無法支援分布式、集群環境。

推薦:資料庫記錄登入歷史

CREATE TABLE login_history (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    user_id BIGINT NOT NULL,
    login_ip VARCHAR(45) NOT NULL,   -- 支援 IPv6
    login_time DATETIME NOT NULL,
    user_agent VARCHAR(500),
    INDEX idx_user_time (user_id, login_time DESC)
);

登入流程:

  1. 查詢:SELECT login_ip FROM login_history WHERE user_id=? ORDER BY login_time DESC LIMIT 1
  2. 比對:若無記錄或 IP 不同 → 寄送提示 (簡訊/Email/站內信)。
  3. 寫入:INSERT INTO login_history (user_id, login_ip, login_time, user_agent) VALUES (?,?,NOW(),?)

IP 比對的實務考量

  • **IP 非固定**:家用寬帶動態 IP、手機網路切換基地台、公司出口 NAT,同一用戶 IP 常變,**單純比對 IP 誤報率極高**。
  • **更佳指標**:裝置指紋、地理位置 (GeoIP) 變化、登入時間異常、行為分析。
  • **建議**:改為「新裝置/新地點登入提醒」,而非單純 IP 比對。

總結

請將登入歷史寫入資料庫,勿解析日誌。IP 比對參考價值有限,建議結合裝置/地理/行為多維度風控。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved