2010-06-17 4 views
0

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

ответ

3

Если вы используете Postgres, есть конкретные data types for network addresses.

+0

Ох ... не думает, что искать такой тип данных. Могу также использовать это! – mpen

2

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

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

0

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

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

0

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

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

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

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

Чтобы преобразовать обратно в IP сгружено из БДА можно использовать long2ip()

+1

Это не будет работать для IPv6, который составляет 128 бит. – Joe

+0

Python, на самом деле. Я думал, что запрос vars не зависит от языка, поскольку он связан с HTTP? – mpen

Смежные вопросы