gpt4 book ai didi

php - 使用 codeigniter 检索用户的真实 IP

转载 作者:可可西里 更新时间:2023-11-01 12:41:07 25 4
gpt4 key购买 nike

我的应用程序跟踪登录网站的用户的 IP 地址。跟踪在常规网络服务器上运行良好(我们在 hostgator 上),但当我们切换到 PaaS 平台(pagodabox)时似乎开始跟踪奇怪的 IP 地址 在与 pagodabox 支持人员交谈后,他们告诉我 codeigniter 正在接收的 IP pagodabox 的负载平衡器/路由器的 IP 并获取用户的实际 IP 地址,我必须使用 HTTP_X_FORWARDED_FOR

我正在使用 codeigniter 的输入类函数 $this->input->ip_address() 来检索用户的 IP。我查看了该函数并注意到它们具有某种检索 HTTP_X_FORWARDED_FOR IP 值的功能,但我不确定如何使用它。我是否必须在配置中更改/添加某些内容?

编辑:在一些用户指出我应该在负载均衡器的 IP 地址列表中添加什么位置之后,出现了一个新问题:如果 IP 列表经常更改,我该怎么办? (即没有静态IP,全是动态的)

最佳答案

我确定您现在已经解决了这个问题,但我想我会发布正确答案以供将来引用。我遇到了同样的问题(在 AWS 上使用负载均衡器和 CodeIgniter 应用程序。)正如您所指出的,使用 HTTP_X_FORWARDED_FOR header 很容易在负载均衡器或其他分布式环境后面获取正确的 IP。问题是我们如何在 CodeIgniter 中正确地实现这个解决方案?正如前面的答案所指出的:编写自己的 IP 函数。这个问题是,如果在整个应用程序中调用 ip_address() 怎么办?覆盖该函数(使用查看正确 header 的函数)不是更好吗? CodeIgniter 对此有一个方便的机制,很方便:

解决方案是扩展 CodeIgniter Input 类,方法是在/application/core 中创建一个名为 MY_Input.php 的新类文件(MY_ 是扩展的可配置前缀,您可以在配置文件中更改它)。使用扩展,您可以创建与原始类方法同名的函数,而不会破坏任何内容,也无需编辑核心文件。 CodeIgniter 只会使用您的新方法。您的扩展输入类将如下所示:

class MY_Input extends CI_Input {

function __construct()
{
parent::__construct();
}
//Overide ip_address() with your own function
function ip_address()
{
//Obtain the IP address however you'd like, you may want to do additional validation, etc..
$correct_ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
return $correct_ip_address;
}
}

通过这种方式,我们在不破解框架的情况下改变了核心行为,并且整个应用中对 ip_address() 的现有调用现在将使用您的方法。

关于处理链中的其他 IP,如果您只对客户端 IP 感兴趣,那应该无关紧要。至少对于 AWS 负载均衡器,HTTP_X_FORWARDED_FOR header 似乎始终包含正确的客户端 IP。

关于php - 使用 codeigniter 检索用户的真实 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14491043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com