在现在的web应用中,常记录客户端的ip地址。在PHP中, 我们常使用的是$_SERVER['REMOTE_ADDR']来获取客户端ip地址,但是如果客户使用的是代理方式访问呢?我们可以使用如下的方式来或缺客户端的IP地址:

<code>

if($_SERVER['HTTP_CLIENT_IP']){

$ip = $_SERVER['HTTP_CLIENT_IP'];

}elseif($_SERVER['HTTP_X_FORWARDED_FOR']){

$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];

}else{

$ip = $_SERVER['REMOTE_ADDR'];

}

</code>

在此对判定中的字段做 一个解释:

REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP。如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP。
HTTP_CLIENT_IP 是代理服务器发送的HTTP头。如果是“超级匿名代理”,则返回none值。同样,REMOTE_ADDR也会被替换为这个代理服务器的IP。
$_SERVER['REMOTE_ADDR'];                             //访问端(有可能是用户,有可能是代理的)IP
$_SERVER['HTTP_CLIENT_IP'];                        //代理端的(有可能存在,可伪造)
$_SERVER['HTTP_X_FORWARDED_FOR'];  //用户是在哪个IP使用的代理(有可能存在,也可以伪造)

在将获取的ip地址进行存储到数据库时,可使用ip2long来定义格式,读取出来的时候通过long2ip来还原为ip v4格式。

标签:
本文连接地址: http://www.fresker.com/old2/archives/283 (转载注明出处)

回复

目前暂无评论

Sorry, 评论已关闭.