我有一个使用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
上的文件正在使用远程地址。我该如何扩展呢?
干杯!
答案 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')
。它对我有用。
我真的要感谢你们帮助我解决这个问题。
干杯!