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

Codeigniter's Session Library: How to get the correct IP Address when using Proxy

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

当我使用 $_SERVER['REMOTE_ADDR'] 我的应用程序 returns Cloudflare 的 IP 而不是我用户的 IP,所以我总是需要使用 $_SERVER['HTTP_CF_CONNECTING_IP'] 来代替。

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

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

干杯!

因此,正如@Narf 评论的那样,ci_sessions ip_address 仅在您使用 sess_match_ip 时才重要(这是 config.php 中的设置)。而且,用他自己的话来说:

that's not sustainable outside of intranet environments, because public IP addresses can change often

所以他的建议是 ci_sessions table 留下 Cloudfare 的地址。我认为把它留在这里以供将来参考会很好。

但如果您真的需要创建自定义驱动程序,@DFriend 的推荐很有用。您可以在 CI 的用户指南 in this section.

中找到更多相关信息

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

非常感谢你们帮助我解决这个问题。

干杯!