Сохранение IP-адреса в БД - PullRequest
0 голосов
/ 17 июня 2010

Я хочу сохранить IP-адрес пользователя в моей базе данных на случай, если возникнут какие-либо юридические проблемы, и нам нужно будет отследить, кто и какое действие выполнил.Поскольку я очень сомневаюсь, мне когда-либо действительно понадобится использовать эти данные (ну, может быть, для подсчета уникальных попаданий или чего-то еще), как вы думаете, я могу просто выбросить REMOTE_ADDR в поле?Если да, какой должна быть длина этого поля?39 символов должны соответствовать IPv6-адресу, нет?Я не знаю, получу ли я когда-нибудь что-нибудь из этого, но на всякий случай ...

Ответы [ 4 ]

3 голосов
/ 17 июня 2010

Если вы используете Postgres, для сетевых адресов существуют конкретные типы данных .

2 голосов
/ 17 июня 2010

В SQL Server мы использовали VARBINARY [16] для IP-адресов для IPv4 (4 байта) и IPv6 (16 байтов).

Но в вашем случае, если это просто для периодического ручного просмотра, а не для машинной обработки, просто сохраните строку. (И да, 39 символов будет максимум.)

0 голосов
/ 17 июня 2010

Наиболее эффективный способ хранения IP-адресов в поле БД - это преобразование их в целое число вместо использования строки.

CREATE TABLE `table` (
...
  `ip` int(10) unsigned NOT NULL,
...

Поскольку вы упоминаете REMOTE_ADDR, я предполагаю, что вы будете использовать PHP.Вы можете преобразовать IP-адреса в подходящее значение, используя ip2long ()

sprintf('%u',ip2long($_SERVER['REMOTE_ADDR']))

Чтобы преобразовать IP-адрес, полученный из БД, вы можете использовать long2ip ()

0 голосов
/ 17 июня 2010

Store some полное и однозначное представление данных. Когда вам нужно выполнить запрос к данным, и когда вы выясните, какой тип запроса к данным вам нужен, именно тогда вы выясните, как преобразовать данные, чтобы вы могли затем эффективно запросить их.

Если вы сохраняете IP-адрес, скажем, первого посещения пользователя в какой-либо сессии пользователя, вы можете рассмотреть возможность обратного DNS-поиска по IP-адресу. Это даст информацию о интернет-провайдере пользователя. В случае возникновения юридических вопросов, теперь у вас есть больше информации. Но так как эти поиски являются дорогостоящими (с точки зрения времени), вы можете сделать это в качестве фоновой задачи и, возможно, захотите сделать это только для начальных обращений, а не последующих обращений с того же IP-адреса в течение любого данного сеанса пользователя.

...