我通过在MySQL数据库中保存$_SERVER['REMOTE_ADDR']
的值来保存用户的IP地址。问题是Firefox和Chrome $_SERVER['REMOTE_ADDR']
都是::1
(这意味着 IPv6 中的localhost),而IE和Opera的问题是127.0.0.1
( IPv4 < /强>)。
所以,我的问题是
IP版本是否依赖于浏览器? (我曾经认为它取决于 电脑)
我应该在数据库中创建两个字段,一个用于IPv4地址,一个用于IPv6地址吗?
我应该将所有IP统一到IPv6吗?我怎样才能在PHP中做到这一点(如果可能的话)?
答案 0 :(得分:6)
相当明显 - 你的盒子支持IPv6,Firefox / Chrome只要有可用就使用IPv6,而IE和Opera则没有(或者它是默认的默认设置)。
将地址存储在足以容纳IPv6地址的字符串中。
不,'因为一般情况下你不能。
答案 1 :(得分:2)
使用PHP函数inet_pton
将人类可读的IP地址转换为打包的表示形式。然后,您可以将每个IP地址存储在数据库的BINARY(16)
或VARBINARY(16)
字段中。
答案 2 :(得分:2)
浏览器将使用任何可用的内容。这可以是IPv4或IPv6,甚至可以在会话期间更改。最重要的是,请记住,主机可以拥有许多IPv6地址,因此它也可能在会话期间发生变化。
简而言之:不要太依赖REMOTE_ADDR的值: - )