是否有替代$ _SERVER ['REMOTE_ADDR']。它返回訪問站點的計算機的IP地址。 我試圖搜索有關路由器分配的相同的外部IP,並進入此: How do two computers connect to same external address through NAT? 並發現如果計算機連接到相同的調制解調器,則分配相同的外部IP。 我在php中使用$ _SERVER ['REMOTE_ADDR']來創建一個簡單的登錄程序,以確定用戶是否已經登錄到同一網絡中的其他地方。如果這些計算機通過路由器連接到同一個調制解調器,這實際上不會工作。
2
A
回答
2
使用更傳統的基於cookie的登錄解決此問題。瀏覽器通過提供唯一標記來標識用戶。正如你所發現的那樣,葉問題並不是唯一的。
+0
謝謝,剛剛從你說的一個想法:} – 2011-05-12 14:02:55
7
不,這是你能做的最好的。服務器只知道請求來自何處,並且可能是是代理或NAT路由器或某個其他實體,其不是而是直接最終用戶。對此你無能爲力,這就是網絡的工作原理。
解決方案很簡單:不要使用IP來識別用戶。永遠。使用cookies。
+0
我還沒有說完整個故事,我實際上使用會話來存儲所有登錄的用戶名。而Cookie用於在本地存儲用戶名和IP。 – 2011-05-12 14:02:15
相關問題
- 1. $ _SERVER ['REMOTE_ADDR']總是isset()?
- 2. nginx爲php $ _SERVER準備set_proxy_header ['REMOTE_ADDR']
- 3. $ _SERVER ['REMOTE_ADDR']無法正常工作
- 4. 替代$ _SERVER ['HTTP_REFERER'] MSIE中的PHP變量
- 5. 在內部網中僞造$ _SERVER ['REMOTE_ADDR']?
- 6. $ _SERVER ['REMOTE_ADDR']不返回IP地址
- 7. 爲什麼$ _SERVER ['REMOTE_ADDR']返回127.0.0.1
- 8. GeoIP和$ _SERVER ['REMOTE_ADDR']有多準確?
- 9. 登錄安全:我可以信任php的$ _SERVER ['REMOTE_ADDR']嗎?
- 10. PHP $ _SERVER ['REMOTE_ADDR']有時會解析爲空字符串
- 11. Nginx使用X-Forwarded替換REMOTE_ADDR
- 12. 如何在$ _SERVER ['REMOTE_ADDR']中設置通配符?
- 13. $ _SERVER ['PHP_SELF']的替代選擇是什麼?
- 14. $ _SERVER ['REMOTE_ADDR']基於瀏覽器的位置回退?
- 15. 突然$ _ SERVER [「REMOTE_ADDR」]開始返回10.10.10.10 PHP
- 16. $ _SERVER ['REMOTE_ADDR'];可能的返回值是什麼?
- 17. 負載平衡器$ _SERVER ['REMOTE_ADDR']不起作用
- 18. $ _SERVER ['REMOTE_ADDR']返回5個數字長的IP
- 19. PHP $ _SERVER和url?
- 20. PHP REMOTE_ADDR和安全會話
- 21. SELECT .. IN的替代方案(..)
- 22. 用JOIN聲明代替「IN」
- 23. 替代使用IN子句
- 24. 爲什麼$ _SERVER [「REMOTE_ADDR」]顯示與我的外部IP不同的IP?
- 25. PHP/html:替代刷新
- 26. 使用REMOTE_ADDR curl登錄到Facebook php
- 27. PHP替代trac?
- 28. PHP $ _SERVER ['DOCUMENT_ROOT']和htaccess?
- 29. php $ _SERVER ['DOCUMENT_ROOT']問題
- 30. PHP call_user_func替代
將IP地址作爲唯一的用戶驗證是一個壞主意。你應該設置會話。參見http://php.net/manual/en/features.sessions.php – Diarmaid 2011-05-12 13:25:32
@Diarmaid或HTTP Auth eg。 http://php.net/manual/en/features.http-auth.php – Treffynnon 2011-05-12 13:26:51
ip地址不足以進行用戶認證(例如,如果用戶在同一個代理後面,你會做什麼?),你應該使用session。 – soju 2011-05-12 13:27:47