Различные браузеры, разные IP-адреса?
Я сохраняю IP-адреса пользователя, сохраняя значение $_SERVER['REMOTE_ADDR']
в базе данных MySQL. Проблема заключается в том, что для Firefox и Chrome $_SERVER['REMOTE_ADDR']
есть ::1
(это означает, что localhost в IPv6), а для IE и Opera - 127.0.0.1
(IPv4).
Итак, мои вопросы:
-
Являются ли версии IP зависимыми от браузера? (Раньше я думал, что это зависит от
компьютер)
-
Должен ли я создать два поля в базе данных, один для адресов IPv4 и один для IPv6?
-
Нужно ли объединять все IP-адреса с IPv6? И как я могу это сделать в PHP (если это возможно)?
Ответы
Ответ 1
-
Достаточно очевидно: в вашем блоке включен IPv6, Firefox/Chrome использует IPv6 всякий раз, когда он доступен, в то время как IE и Opera не работают (или это настройка по умолчанию).
-
Сохраните адрес в строке, достаточно длинной для хранения IPv6-адреса.
-
Нет, потому что в общем случае вы не можете.
Ответ 2
Используйте функцию PHP inet_pton
, чтобы преобразовать доступные для чтения IP-адреса в их упакованное представление. Затем вы можете сохранить каждый IP-адрес в поле BINARY(16)
или VARBINARY(16)
в вашей базе данных.
Ответ 3
Браузер будет использовать все, что доступно. Это может быть IPv4 или IPv6, и это может даже измениться во время сеанса. Кроме того, имейте в виду, что хост может иметь много адресов IPv6, чтобы он мог измениться и во время сеанса.
Короче: не слишком сильно зависеть от значения REMOTE_ADDR: -)