我的问题是如何为访问我网站的每位唯一身份访问者创建一个唯一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,依此类推。感谢。
答案 0 :(得分:6)
最简单的方法可能就是使用session_start和session_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 name
和IP 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;
?>