$ _SERVER ['REMOTE_ADDR']没有给出正确的IP地址

时间:2012-06-11 14:39:10

标签: php ip localhost

我正在使用PHP创建一个表单,我想记录用户的IP地址。这是我使用的代码片段:

<input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" />

当我在XAMPP中打开代码并读取源代码时,该值的IP地址与我的IP地址不同:

<input type="hidden" name="ip" value="::1" />

当我在localhost(XAMPP)中使用时,这个IP地址通常会发生吗? 如果没有,是否有任何替代方法可以获取用户的IP地址?

6 个答案:

答案 0 :(得分:25)

IP ::1在IPv6版本中是“localhost”。您的计算机配置了IPv6 - 因此您将获得此IP地址。也许,当您在实时服务器上部署应用程序时,将不会在服务器上配置IPv6,并且您的应用程序将获得更熟悉的IPv4地址(例如aaa.bbb.ccc.ddd)。

另一方面,$_SERVER['REMOTE_ADDR']可能并不总是包含正确的地址。最好使用:

if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip_address = $_SERVER['REMOTE_ADDR'];
}

答案 1 :(得分:18)

  

<input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" />

不要那样做。提交表单时从$_SERVER获取请求。在生成表单并将其存储在表单中时获取它只会让人们有机会更改它。

  

Does this IP address normally happen when I use it in a localhost (XAMPP)?

是。当您从localhost请求页面时,获取本地IP(IPv6)地址是正常的。

答案 2 :(得分:4)

':: 1'是localhost(或127.0.0.1)的IPV6版本。

打开端口80并从您的IP地址访问该页面。应该工作正常,然后:)。

答案 3 :(得分:4)

1)。您无需向表单添加<?php echo $_SERVER['REMOTE_ADDR']; ?>。在这种情况下,很容易伪造它(实际上它很容易)。最好在服务器端为数据添加IP。

2)您还可以查看$_SERVER['HTTP_X_FORWARDED_FOR']。 如果用户有代理,其中一些(透明代理)会在那里放置真实用户的IP。

3)请注意:有关IP的数据根本不值得信赖。

答案 4 :(得分:1)

这实际上就是你的IP。虽然您的IPv6 IP而不是IPv4。

在IPv6中,:: 1代表localhost / 127.0.0.1。

答案 5 :(得分:0)

Color

此代码返回客户端的ip。如果您认为这是服务器IP,那么您可能是对的,因为您的服务器(可能是)托管在您的电脑上。 由于您的客户端(PC)和服务器在同一台PC上运行,因此它们都具有相同的IP。 如果您不理解这一点,您应该对ips,本地ips以及所有这些内容进行一些研究。