Различные браузеры, разные 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: -)