0

我想将用户的 IP 地址保存到我的数据库中,以防万一出现任何法律问题,我们需要追踪谁执行了哪些操作。由于我非常怀疑我是否真的需要使用这些数据(好吧,也许是为了计算独特的点击量或其他东西)你认为我可以把它转储REMOTE_ADDR到一个字段中吗?如果是这样,该字段的长度应该是多少?39 个字符应该适合 IPv6 地址,不是吗?我不知道我是否会得到这些,但以防万一......

4

4 回答 4

3

如果您碰巧使用 Postgres,则网络地址有特定的数据类型

于 2010-06-17T01:01:47.807 回答
2

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

但在你的情况下,如果只是为了偶尔的人工审查而不是机器处理,只需存储字符串。(是的,最多 39 个字符。)

于 2010-06-17T01:04:20.187 回答
0

存储数据的一些完整且明确的表示。当您需要查询数据时,当您弄清楚您需要对数据进行哪种类型的查询时,就是当您弄清楚如何转换数据以便您可以高效地查询它时。

如果您要存储用户在任何给定用户会话中的首次访问的 IP 地址,您可能会考虑对 IP 地址执行反向 DNS 查找。这将产生有关用户 ISP 的信息。如果确实出现法律问题,现在您可以获得更多信息。但是因为这些查找成本很高(就所花费的时间而言),您可以将其作为后台任务执行,并且可能希望仅针对初始命中执行此操作,而不是在任何给定用户会话中来自同一 IP 地址的后续命中。

于 2010-06-17T01:08:03.757 回答
0

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

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

正如您提到的 REMOTE_ADDR 我假设您将使用 PHP。您可以使用ip2long()将 IP 地址转换为合适的值

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

要转换回从 DB 获取的 IP,您可以使用long2ip()

于 2010-06-17T01:08:18.007 回答