我正在使用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地址?
答案 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以及所有这些内容进行一些研究。