Codeigniter的会话库:如何在使用代理时获取正确的IP地址

时间:2017-05-15 18:26:36

标签: codeigniter codeigniter-3 cloudflare

我有一个使用Codeigniter 3x和Cloudflare的应用程序来添加额外的安全层。

当我使用$_SERVER['REMOTE_ADDR']时,我的应用程序会返回Cloudflare的IP而非用户的IP,因此我总是需要使用$_SERVER['HTTP_CF_CONNECTING_IP']

到目前为止,好的。当我在任何控制器中需要用户的IP时,我会联系到$_SERVER['HTTP_CF_CONNECTING_IP']。问题是我的会话库不能这样做。 我的ci_sessions表中填充了Cloudflare的IP。

所以我的问题可能有点广泛,但我需要一些关于如何解决这个问题的想法,而不会搞乱CI的核心文件?我注意到system/libraries/session/drivers/Session_database_driver.php上的文件正在使用远程地址。我该如何扩展呢?

干杯!

1 个答案:

答案 0 :(得分:1)

所以,正如@Narf评论的那样,ci_sessions ip_address只对你使用sess_match_ip(这是config.php中的一个设置)很重要。并且,用他自己的话说:

  

在Intranet环境之外不可持续,因为公共IP地址可能经常发生变化

所以他的建议是将ci_sessions表留给Cloudfare的地址。我认为把它留在这里以备将来参考是好的。

但如果你真的需要创建自定义驱动程序,@ DFriend的推荐就像魅力一样。您可以在CI的用户指南in this section上找到有关此内容的更多信息。

如果您想将用户的IP用于其他目的,请使用$_SERVER['HTTP_CF_CONNECTING_IP']甚至$this->server('HTTP_CF_CONNECTING_IP')。它对我有用。

我真的要感谢你们帮助我解决这个问题。

干杯!