12

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

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

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

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

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

4

6 回答 6

27

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'];
}
于 2012-06-11T14:43:02.453 回答
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) 地址是正常的。

于 2012-06-11T14:42:43.387 回答
4

1)。您无需添加<?php echo $_SERVER['REMOTE_ADDR']; ?>到表单中。在这种情况下,很容易伪造它(实际上在任何情况下都很容易)。更好地将 IP 添加到服务器端的数据中。

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

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

于 2012-06-11T14:46:49.017 回答
4

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

打开端口 80 并从您的 IP 地址访问该页面。那么应该可以正常工作:)。

于 2012-06-11T14:42:23.543 回答
1

这实际上是您的 IP。尽管是您的 IPv6 IP 而不是 IPv4。

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

于 2012-06-11T14:42:41.597 回答
0
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARTDED_FOR'] != '') {
                $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
            } else {
                $ip_address = $_SERVER['REMOTE_ADDR'];
            }   

此代码返回客户端的 ip。如果您认为这是服务器 IP,那么您可能是对的,因为您的服务器(大概)托管在您的 PC 上。由于您的客户端(PC)和服务器在同一台PC上运行,它们都具有相同的IP。如果你不明白这一点,你真的应该对 ips、本地 ips 和所有这些东西做一些研究。

于 2015-08-05T10:31:19.383 回答