如何为每个新访客创建唯一标识符?

3
我的问题是如何为每个访问我的网站的独特访客创建一个唯一的ID(将放在URL的末尾,例如http://example.com/?id=12345)。我还想知道如何跟踪访问者的IP地址,以便他们只收到一个ID /链接。换句话说,如何编写一个脚本,为每个IP地址生成一个唯一的ID。简而言之,我想要一个能够为每个新访客生成唯一ID的脚本。因此,例如:访客1的ID = http://example.com/?id=12345,访客2的ID = http://example.com/?id=77369,依此类推。谢谢。

2
你正在追踪什么东西,它非常重要以至于重复是致命的,但又不足以强制用户只能注册并登录?顺便说一句,如果你真的关心你的数据,你不会把它放在一个URL上... - Tyler Eaves
5个回答

6

最简单的方法可能就是使用session_startsession_id函数。

 session_start();
 $id = session_id();

您可以保存$id并将其与数据库中的任何内容相关联。

或者,只需保存以微秒为单位的非常精确的时间戳。

$id = microtime();

或者为每个用户在数据库中创建一行,并使用该行的主键。


谢谢,但是我该如何将它整合到网站中呢?抱歉,我对php真的很新手 :( - user719813
在我看来,如果你实际上不需要它,启动会话是一项过于昂贵的操作。 - zerkms
你丢失了microtime的参数。另外,据我所知,现代常规硬件无法分辨微秒级别的时间,所以最后几个数字是不可靠的。 - zerkms
1
感谢Doug T.的回答,它帮助我解决了前端IP地址部分作为标识符的问题,现在我展示会话ID的一部分! - Avatar

5
所有答案都可以很容易地整合。但是,你可能没有考虑过当多个用户共享一个IP时会发生什么。例如,Google的所有员工或AOL或Juno的所有用户可能在它们之间使用100个IP。如果它们每10至25天获得新的IP,那该怎么办?
数据的意义在于其有意义。你的数据将如何有意义?IP地址可能是一个12岁的纽约北部的孩子,而下一天可能是来自新泽西州哈肯萨克的40岁妇女。除了使你的代码变得复杂之外,这样实施系统有什么好处呢?
我的建议是重新审视你的要求。你真正想要实现什么?实现一个简单的cookie来跟踪独立访问者可能会更好。它仍然不会百分之百准确(那些从网吧访问的人怎么办?他们都使用同一台计算机),但是不必为每个URL附加所有额外的参数,这将使代码变得简单得多。
简而言之,确保每个访客拥有唯一ID的唯一方法是要求他们登录。尽管他们可能会使用不同的电子邮件地址设置多个帐户,但至少你可以保证没有两个不同的人会获得相同的ID。

收集IP地址可以显示大多数用户来自哪里(例如城市,国家)。即使不是100%准确,仍然可以有用。 - mdehghani

3
如何创建像这样非常独特的东西。
$ip = $_SERVER['REMOTE_ADDR'];
$m_time = microtime();

$unique_id = md5($ip . $m_time . rand(0, time()));

希望这可以帮助到您。

1
微秒函数(microtime())中有一个小错误,我似乎无法在您的答案中进行更新,但无论如何,还是非常感谢您提供的解决方案! - hobailey

2
如果您可以接受在几百万(或者1亿,谁知道呢)之后可能会出现重复的问题 - 那么最简单的方法是使用uniqid('', true)
如果不能接受出现重复的情况 - 那么可以在数据库中创建一些序列,并且为每个新用户递增该序列。

很遗憾,我不能冒重复的风险 :( - user719813
1
@user716354:我已经为两种情况编写了我的答案。 - zerkms

0

我的建议是使用SQL表格对:[id,ip]。
确保您对数据库的访问是“原子性”的。
也就是说,在您读取和可选写入数据库之间没有人可以插入。
请参阅更多阅读
如果存在,则get(ip)将返回id
否则将生成新条目并返回新id(简单+1方法)。

我可以想到许多以上的变化。
底线:使用简单的SQL表格和简单的增量方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接