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

zel*_*lez 11 php ip localhost

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

<input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" />
Run Code Online (Sandbox Code Playgroud)

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

<input type="hidden" name="ip" value="::1" />
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*s G 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'];
}
Run Code Online (Sandbox Code Playgroud)

  • 迟来的,但是如果你使用HTTP_X_FORWARDED_FOR也要记住,你不能相信这只允许访问本地IP以获得安全的管理页面,因为这个头很容易被欺骗.实际上,StackOverflow曾经成为这件事的牺牲品,幸运的是友好的用户向他们报告了这件事. (3认同)
  • @sqlchild 选择:用户名/密码、用户证书、隧道。 (2认同)

Que*_*tin 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)地址是正常的.