簡體   English   中英

jsp獲取ip地址

[英]jsp get ip address

什么是阻止某人投票兩次的最佳方式? 我如何獲得用戶的IP地址? 如果他們在大型網絡上怎么辦? 那個網絡上的每個人都會顯示相同的IP嗎? 謝謝


更新:request.getRemoteAddr()和request.getRemoteHost()返回服務器名稱,而不是客戶端的主機名和IP。 其他人有什么好主意嗎?


好吧,讓我們忘記投票兩次。 我只是想獲取用戶的IP地址? 我嘗試了request.getRemoteAddr()和request.getRemoteHost(),並認為我獲取服務器地址。 我有權訪問兩個獨立的網絡,並獲得相同的IP地址:(

在JSP中,使用request.getRemoteAddr() 這將返回以String形式發送請求的代理的IP地址。

此外, request.getRemoteHost()將嘗試獲取標准主機名。 但是,如果它無法解析名稱,則將返回IP地址,如getRemoteAddr()中所示

要獲取路由器/防火牆后面的客戶端的IP,您可以使用request.getHeader("X-FORWARDED-FOR")

X-Forwarded-For(XFF)HTTP標頭是用於識別通過HTTP代理或負載平衡器連接到Web服務器的客戶端的原始IP地址的事實標准。 http://en.wikipedia.org/wiki/X-Forwarded-For

但請記住,您和客戶之間的代理可以更改此值。 雖然它應該是正確的IP。

如果用戶位於NAT路由器代理服務器后面,您將看到它們具有相同的IP地址。 因此,它不是允許用戶投票一次的最佳方式。

另一種方法是使用cookie ,但同樣可以刪除cookie並再次投票。

AFAIK防止第二次投票的唯一方法是通過身份驗證。 顯然,這並不總是可行的,因此你必須減少單個用戶投下大量選票的可能性。

  • 按源IP限制投票。 使用getRemoteAddr()允許,比如......每小時一次投票?......每分鍾? ......這取決於你期望的投票數量。 根據經驗調整數量。
  • 為每次投票投票制作一個cookie ,該投票在投票結束后到期。
  • 通過檢查和驗證RefererUser-Agent類的標頭,更難以偽造請求。

在JSP頁面中,只需使用以下表達式: ${pageContext.request.remoteAddr}

您可以使用request.getRemoteAddr()獲取IP地址。 如果網絡使用NAT路由器,則所有用戶都將獲得相同的地址

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM