2010-06-17 11 views
0

Je souhaite enregistrer l'adresse IP d'un utilisateur dans ma base de données au cas où des problèmes d'ordre juridique surgiraient et que nous devions déterminer qui avait effectué cette action. Comme je doute fortement, je vais devoir utiliser ces données (enfin, peut-être pour compter des hits uniques ou quelque chose) pensez-vous que je peux simplement vider le REMOTE_ADDR dans un champ? Si oui, quelle devrait être la longueur de ce champ? 39 caractères devraient correspondre à une adresse IPv6, non? Je ne sais pas si je pourrai en avoir, mais juste au cas où ...Enregistrement d'une adresse IP dans la base de données

Répondre

2

Dans SQL Server, nous avons utilisé VARBINARY [16] pour les adresses IP pour IPv4 (4 octets) et IPv6 (16 octets).

Mais dans votre cas, si c'est juste pour un examen manuel occasionnel et non pour le traitement de la machine, il suffit de stocker la chaîne. (Et oui, 39 caractères seraient le maximum.)

0

Stockez certains une représentation complète et sans ambiguïté des données. Lorsque vous avez besoin d'interroger les données et lorsque vous déterminez le type de requête sur les données dont vous avez besoin, vous devez déterminer comment transformer les données afin de pouvoir les interroger efficacement.

Si vous stockez l'adresse IP de, disons, la première visite de l'utilisateur dans une session utilisateur donnée, vous pouvez envisager d'effectuer une recherche DNS inversée sur l'adresse IP. Cela donnera des informations sur le FAI de l'utilisateur. En cas de problèmes juridiques, vous avez maintenant plus d'informations. Mais comme ces recherches coûtent cher (en termes de temps), vous pouvez le faire en tâche de fond et vous pouvez le faire uniquement pour les hits initiaux, et non pour les autres hits de la même adresse IP dans une session utilisateur donnée.

0

La méthode la plus efficace pour stocker des adresses IP dans un champ de base de données est de les convertir en nombre entier au lieu d'utiliser une chaîne. Comme vous le mentionnez REMOTE_ADDR, je suppose que vous utiliserez PHP. Vous pouvez convertir les addres IP à une valeur appropriée en utilisant ip2long()

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

Pour reconvertir un, vous pouvez utiliser les cheveux de DB IP long2ip()

+1

Cela ne fonctionnera pas pour IPv6 qui est 128 bits de bonté. – Joe

+0

Python, en fait. Je pensais que les variables de demande étaient indépendantes de la langue comme ils le font avec HTTP? – mpen