工作中经常会有有获得用户真实ip的情况,HTTP_X_FORWARDED_FOR总是忘记,所以我这里记录下来吧.
在PHP 中使用 [“REMOTE_ADDR”] 来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,如果要获取真正的ip就需要使用[‘HTTP_X_FORWARDED_FOR’].
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}elseif($_SERVER['REMOTE_ADDR']!=''){
$ip = $_SERVER['REMOTE_ADDR'];
}else{
return $_SERVER['HTTP_CLIENT_IP'];
}
以下引用 https://www.cnblogs.com/andhm/archive/2010/12/18/1910030.html
1.REMOTE_ADDR:浏览当前页面的用户计算机的ip地址.
2.HTTP_X_FORWARDED_FOR: 浏览当前页面的用户计算机的网关.
3.HTTP_CLIENT_IP:客户端的ip.
获取用户IP地址的三个属性的区别 (HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
一、没有使用代理服务 器的情况:
REMOTE_ADDR = 您的 IP
HTTP_VIA = 没数值或不显示
HTTP_X_FORWARDED_FOR = 没数值或不显示
二、使用透明代理服务器的情 况:Transparent Proxies
REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 您的真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。
三、使用普通匿名代理服务器的情况:Anonymous Proxies
REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。