2010-06-17 108 views
0

我想将用户的IP地址保存到我的数据库,以防万一出现任何法律问题,我们需要追查谁执行了什么操作。因为我非常怀疑我会有史以来实际上需要使用这些数据(嗯,也许是为了计算独特的命中或什么)你认为我可以将REMOTE_ADDR转储到一个字段?如果是这样,该领域的长度应该是多少? 39个字符应该符合IPv6地址,不是?我不知道我是否会得到任何这些,但以防万一...将IP地址保存到数据库

回答

2

在SQL Server中,我们使用VARBINARY [16]为IPv4(4字节)和IPv6(16字节)的IP。

但在你的情况下,如果只是偶尔手动检查而不是机器处理,只需存储字符串。 (是的,39个字符将是最大。)

0

商店一些完整和明确的数据表示。当您需要查询数据时,以及何时找出需要的数据的查询类型时,也就是当您计算出如何转换数据以便可以高效查询时。

如果要在任何给定的用户会话中存储用户的第一次访问的IP地址,则可以考虑对IP地址执行反向DNS查找。这将产生关于用户的ISP的信息。如果出现法律问题,现在您可以获得更多信息。但是由于这些查找代价很高(以时间为准),因此您可以将其作为后台任务来执行此操作,并且可能只需要在初始匹配中执行此操作,而不是在任何给定用户会话中从相同IP地址进行后续匹配。

0

在DB字段中存储IP地址的最有效方法是将它们转换为整数而不是使用字符串。

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

正如你提到的REMOTE_ADDR,我假设你将使用PHP。您可以使用ip2long()

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

要转换回一个IP从数据库中取出的IP ADDRES转换为一个合适的值,你可以使用long2ip()

+1

这对于128位善良的IPv6来说不起作用。 – Joe 2010-06-17 01:09:16

+0

Python,其实。我认为请求变量与语言无关,因为它们与HTTP有关? – mpen 2010-06-17 02:20:05