如何为每位新访客创建唯一ID?

时间:2011-04-20 03:16:47

标签: php scripting uuid

我的问题是如何为访问我网站的每位唯一身份访问者创建一个唯一ID(将在网址的末尾显示,例如http://example.com/?id=12345)。我也想知道如何跟踪访问者的IP地址,以便他们只收到一个id /链接。换句话说,如何制作一个脚本,每个IP地址生成一个唯一的ID。简而言之,我想要一个为每个新访客生成唯一ID的脚本。例如:访问者1的id = http://example.com/?id = 12345,访问者2的id = http://example.com/?id = 77369,依此类推。感谢。

6 个答案:

答案 0 :(得分:6)

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

 session_start();
 $id = session_id();

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

替代方案,只需以微秒为单位保存非常准确的时间戳

$id = microtime();

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

答案 1 :(得分:4)

所有答案都可以简单地纳入。但是,您可能没有想过的是当多个用户共享IP时会发生什么。例如,Google的所有员工或AOL或Juno的所有用户都可以在所有这些用户中使用100 ips。如果他们每10到25天提供一次新的IP,该怎么办?

数据背后的想法是有意义的。您的数据将如何有意义?知识产权可能是一名来自纽约州北部的12岁孩子,另一名来自新泽西州哈肯萨克的40岁女性。除了使代码复杂化之外,实现这样一个系统有什么用呢?

我的建议:重新审视您的要求。你到底想要完成什么?实现一个简单的cookie来跟踪唯一访问者可能会更好。它仍然不会100%准确(那么从网吧访问所有人使用同一台计算机付费的人呢?)。但它会使代码更简单,不必为每个URL附加所有额外的参数。

简而言之,确保每位访问者拥有唯一ID的唯一方法就是要求他们登录。当然,他们可能会使用不同的电子邮件地址设置多个帐户,但至少可以保证没有两个单独的人会获得相同的ID。

答案 2 :(得分:2)

如果你可能会在几百万(或100M,谁知道)之后得到重复 - 那么最简单的方法是使用uniqid('', true)

如果不是 - 那么在数据库中创建一些序列并为每个新用户递增它。

答案 3 :(得分:2)

如何创造非常独特的东西。

$ip = $_SERVER['REMOTE_ADDR'];
$m_time = mircotime();

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

希望这有帮助,谢谢

答案 4 :(得分:0)

My 2 cents are to use SQL table of pairs: [id, ip].
Making sure that your access to the data base is "atomic".
That is, no one can get in between your read & optional write to the database.
for more reading
get(ip) will return the id if exists
or will generate a new entry and will return the new id (simple +1 method).

I can think of many variations to the above.
Bottom line: use simple sql table with simple incremental method.

答案 5 :(得分:0)

此代码基于生成唯一ID device nameIP address以及device language

  <?php
    preg_match('/\((.*?)\)/', $_SERVER['HTTP_USER_AGENT'], $matches, PREG_OFFSET_CAPTURE);
    $device_name = $matches[0][0];
    $unique_id=md5($device_name.$_SERVER['REMOTE_ADDR'].$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
    echo $unique_id;
  ?>