php - 如何在 PHP 中获取客户端 IP 地址

标签 php environment-variables ip-address

如何使用 PHP 获取客户端 IP 地址?

我想记录通过他/她的 IP 地址登录我网站的用户。

最佳答案

无论您做什么,请确保不要信任从客户端发送的数据。 $_SERVER['REMOTE_ADDR'] 包含连接方的真实 IP 地址。这是您能找到的最可靠的值。

但是,它们可能位于代理服务器之后,在这种情况下,代理可能设置了 $_SERVER['HTTP_X_FORWARDED_FOR'],但该值很容易被欺骗。例如,它可以由没有代理的人设置,或者 IP 可以是来自代理后面的 LAN 的内部 IP。

这意味着如果您要保存 $_SERVER['HTTP_X_FORWARDED_FOR'],请确保保存 $_SERVER['REMOTE_ADDR' ] 值。例如。通过将这两个值保存在数据库的不同字段中。

如果您要将 IP 作为字符串保存到数据库中,请确保您有至少 45 个字符的空间。 IPv6将继续存在,并且这些地址比旧的 IPv4 地址更大。

(请注意,IPv6 通常最多使用 39 个字符,但也有一个特殊的 IPv6 notation for IPv4 addresses,其完整形式最多可包含 45 个字符。因此,如果您知道自己在做什么,则可以使用 39 个字符,但如果您只想设置并忘记它,使用 45)。

关于php - 如何在 PHP 中获取客户端 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3003145/

相关文章:

networking - 172.0.0.1 和 192.168.0.1 到底有什么区别?

php 意外的 T_VARIABLE,这里没什么帮助

php - 要搜索+替换 href ="URL"的正则表达式

c++ - 使用 getenv() 读取环境变量返回 NULL C++

spring-boot - 带有@ConditionalOnProperty 的@RefreshScope 不起作用

windows - 在 PowerShell 或 cmd 中读取环境变量会产生不同的结果

javascript - 如何跟踪我网站上的重新访问者以推送促销?

php - 将收到的电子邮件保存到数据库

php - 为什么第二个连接在我的查询中不起作用?

python - 为什么要创建不同的 HOST 和 PORT 变量,然后使用它们来创建 ADDR 变量?