如何正确获取客户端ip

苏生不惑 发布于 2013/06/26 09:46
阅读 779
收藏 0
PHP

获取客户端ip代码如下:

function getClientIp() {
    if (!empty($_SERVER["HTTP_CLIENT_IP"]))
        $ip = $_SERVER["HTTP_CLIENT_IP"];
    else if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
        $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    else if (!empty($_SERVER["REMOTE_ADDR"]))
        $ip = $_SERVER["REMOTE_ADDR"];
    else
        $ip = "error";
    return $ip;
}

但是通过火狐插件改变X_FORWARDED_FOR的值就获得ip为你改X_FORWARDED_FOR的值
请问如何在有代理的时候正确获取ip?

加载中
0
IdleMan
IdleMan
该评论暂时无法显示,详情咨询 QQ 群:点此入群
0
苏生不惑
苏生不惑
如果通过ip来限制用户访问后台,那这样获取的ip相当于没限制,怎么才能正确获取访问的ip呢?
0
夏涌升
夏涌升

看你用途:

1.认为可信任的用户的ip,你那样的获取方式是可以的

2.用于防护,限制 等的ip ,直接用 $_SERVER["REMOTE_ADDR"] 就可以了

夏涌升
夏涌升
回复 @苏翰 :不是多余,那个是按照http协议来获取ip,http是一个君子协议,所以对小人无效。 不过如果用户没用代理的话,直接就romote_addr就可以了。
苏生不惑
苏生不惑
等于$_SERVER["HTTP_CLIENT_IP"]和$_SERVER["HTTP_X_FORWARDED_FOR"]是多余了
0
osc_35904166
osc_35904166

要获取客户端的IP地址,可以使用以下方法之一:

  1. 通过Web服务器获取

在Web服务器上,一般情况下可以通过HTTP请求头中的X-Forwarded-For头获取客户端的IP地址。如果X-Forwarded-For头不存在,则可以通过访问日志获取客户端IP地址。

  1. 使用PHP获取

在PHP中,可以使用$_SERVER['REMOTE_ADDR']获取客户端IP地址。但是,要注意的是,如果客户端使用了代理服务器,则该方法获取的IP地址可能是代理服务器的IP地址。

因此,建议使用以下代码获取客户端IP地址:

 
复制插入
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}
复制插入

这段代码会先检查HTTP_CLIENT_IP和HTTP_X_FORWARDED_FOR头中是否存在IP地址,如果不存在再使用REMOTE_ADDR头中的IP地址。

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部