在现在的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格式。

Still, this one’s gotta hold appeal for someone out there While some argue that japanese are just poor english learners, the argument may be made that the japanese are using https://www.essayclick.net their difficult language as their most prized capital, ensuring thereby their own self-regulation and self-control

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

回复

目前暂无评论

Sorry, 评论已关闭.