2010-06-06 80 views
2

當用戶登錄時,我想將他們的IP保存在數據庫中。我會怎麼做?什麼類型最適合用於MySQL領域? PHP代碼如何獲得IP看起來像?將IP保存到數據庫中

我正在考慮將它作爲登錄/會話內容的額外安全功能。我正在考慮檢查用戶用數據庫登錄的IP,用戶現在使用IP作爲檢查會話的補充。所以它首先檢查會話,然後檢查你是否有一個有效的IP。

這是一個很好的額外功能嗎?還有什麼其他的事情可以讓它更安全?

回答

9

查看mysql中的INET_NTOA和INET_ATON函數。它們將虛線符號IP地址轉換爲32位整數。這使您可以僅以4個字節而不是15個字節存儲IP。確保你使用了一個unsigned int而不是一個帶符號的int。

+0

這些功能似乎也不支持IPv6。我認爲最好的解決方案是一個blob。我很驚訝MySQL沒有像postgres的inet類型那樣的專用數據類型。 – Artefacto 2010-06-06 18:53:27

+0

它們支持IPv6,但會返回一個8字節的整數而不是4字節的整數。 – 2010-06-06 18:55:36

+2

至於IPv6 - http://stackoverflow.com/questions/420680/how-to-store-ipv6-compatible-address-in-a-relational-database/420688#420688 – 2010-06-06 18:58:18

2

關於William Leader的建議,PHP有兩個函數ip2long和long2ip,完全符合他所談論的內容。

0

的勞裏·萊赫蒂寧說,你用$_SERVER['REMOTE_ADDR']來獲得IP地址,一個簡單的PHP代碼看下面......

​​

這只是一個樣品只需修改它適合您的需求。 ..