什么是防止某人投票两次的最佳方式?我如何获得用户的IP地址?如果他们在大型网络上怎么办?那个网络上的每个人都会显示相同的IP吗?感谢
UPDATE:request.getRemoteAddr()和request.getRemoteHost()返回服务器名称,而不是客户端的主机名和ip。其他人有什么好主意吗?
好的,所以让我们忘记投票两次。我只是想获取用户的IP地址?我尝试了request.getRemoteAddr()和request.getRemoteHost(),并认为我获取服务器地址。我可以访问两个独立的网络,并获得相同的IP地址:(
答案 0 :(得分:9)
在JSP中,使用 request.getRemoteAddr()。这将返回以String形式发送请求的代理的IP地址。
此外, request.getRemoteHost()将尝试获取标准主机名。但是,如果无法解析名称,则会返回IP地址,如 getRemoteAddr()。
答案 1 :(得分:2)
如果用户位于NAT router或proxy server后面,您会看到它们具有相同的IP地址。因此,这不是允许用户投票一次的最佳方式。
另一种方法是使用cookies,但同样可以删除cookie并再次投票。
答案 2 :(得分:2)
AFAIK阻止第二次投票的唯一方法是通过身份验证。显然这并不总是可行的,所以你必须减少单个用户投下大量选票的可能性。
Referer
和User-Agent
之类的标题,更难以伪造请求。答案 3 :(得分:2)
要获取路由器/防火墙后面的客户端IP,您可以使用
request.getHeader("X-FORWARDED-FOR")
。
X-Forwarded-For(XFF)HTTP标头 是事实上的识别标准 客户端的原始IP地址 通过连接到Web服务器 HTTP代理或负载均衡器。 http://en.wikipedia.org/wiki/X-Forwarded-For
请记住,您和客户之间的代理可以更改此值。虽然它应该是正确的IP。
答案 4 :(得分:0)
您可以使用request.getRemoteAddr()获取IP地址。如果网络使用NAT路由器,则所有用户都将获得相同的地址
答案 5 :(得分:0)
在您的JSP页面中,只需使用以下表达式:${pageContext.request.remoteAddr}