2011-05-12 58 views
2

是否有替代$ _SERVER ['REMOTE_ADDR']。它返回訪問站點的計算機的IP地址。 我試圖搜索有關路由器分配的相同的外部IP,並進入此: How do two computers connect to same external address through NAT? 並發現如果計算機連接到相同的調制解調器,則分配相同的外部IP。 我在php中使用$ _SERVER ['REMOTE_ADDR']來創建一個簡單的登錄程序,以確定用戶是否已經登錄到同一網絡中的其他地方。如果這些計算機通過路由器連接到同一個調制解調器,這實際上不會工作。

+3

將IP地址作爲唯一的用戶驗證是一個壞主意。你應該設置會話。參見http://php.net/manual/en/features.sessions.php – Diarmaid 2011-05-12 13:25:32

+1

@Diarmaid或HTTP Auth eg。 http://php.net/manual/en/features.http-auth.php – Treffynnon 2011-05-12 13:26:51

+0

ip地址不足以進行用戶認證(例如,如果用戶在同一個代理後面,你會做什麼?),你應該使用session。 – soju 2011-05-12 13:27:47

回答

2

使用更傳統的基於cookie的登錄解決此問題。瀏覽器通過提供唯一標記來標識用戶。正如你所發現的那樣,葉問題並不是唯一的。

+0

謝謝,剛剛從你說的一個想法:} – 2011-05-12 14:02:55

7

不,這是你能做的最好的。服務器只知道請求來自何處,並且可能是是代理或NAT路由器或某個其他實體,其不是而是直接最終用戶。對此你無能爲力,這就是網絡的工作原理。

解決方案很簡單:不要使用IP來識別用戶。永遠。使用cookies。

+0

我還沒有說完整個故事,我實際上使用會話來存儲所有登錄的用戶名。而Cookie用於在本地存儲用戶名和IP。 – 2011-05-12 14:02:15

相關問題