Разные браузеры, разные IP? - PullRequest
10 голосов
/ 16 ноября 2011

Я сохраняю 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 (если это вообще возможно)?

Ответы [ 3 ]

6 голосов
/ 16 ноября 2011
  1. Совершенно очевидно - ваш ящик поддерживает IPv6, Firefox / Chrome использует IPv6, когда это возможно, в то время как IE и Opera этого не делают (или это настройка по умолчанию).

  2. Сохраните адрес в строке, достаточно длинной для хранения адреса IPv6.

  3. Нет, поскольку в общем случае вы не можете.

2 голосов
/ 16 ноября 2011

Браузер будет использовать все, что доступно. Это может быть IPv4 или IPv6, и это может даже измениться во время сеанса. Кроме того, имейте в виду, что хост может иметь много адресов IPv6, поэтому он может меняться и во время сеанса.

Короче говоря: не слишком сильно зависит от значения REMOTE_ADDR: -)

2 голосов
/ 16 ноября 2011

Используйте функцию PHP inet_pton для преобразования удобочитаемых IP-адресов в их упакованное представление.Затем вы можете сохранить каждый IP-адрес в поле BINARY(16) или VARBINARY(16) в вашей базе данных.

...