2011-04-20 68 views
1

我的问题是,如何为每个访问我的网站的唯一访问者创建一个唯一的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,等等。谢谢。如何为每位新访客创建唯一的ID?

+2

你在跟踪这是非常重要的,重复的是致命的,但没有重要到强制用户只需注册并登录?顺便说一句,如果你真的关心你的数据,你不会把它粘在一个URL上... – 2011-04-20 03:28:40

回答

5

最简单的事情可能只是使用session_startsession_id

session_start(); 
$id = session_id(); 

然后,您可以节省掉$ ID,并且与你想在一个数据库或任何关联什么。

另类,只保存关闭微秒

$id = microtime(); 

一个非常准确的时间戳或创建每个用户数据库中的一行,并使用该行的主键。

+0

谢谢,但我如何将它合并到一个网站?对不起,我真的是新来的PHP :( – user719813 2011-04-20 03:21:00

+0

Imho这是太昂贵的操作 - 开始会话,如果你实际上不需要它 – zerkms 2011-04-20 03:21:09

+0

他们我应该使用什么? – user719813 2011-04-20 03:22:26

2

如果是好的,你很可能会经过数以百万计得到重复(或100ms的,谁知道) - 那么最简单的方法是使用uniqid('', true)

如果没有 - 然后在数据库中创建一些序列,并增加它的每个新用户。

+0

Unfortunatley,我不能冒险重复:( – user719813 2011-04-20 03:23:38

+1

@ user716354:我已经写了我的答案,这两种情况。 – zerkms 2011-04-20 03:25:02

2

如何创建像这样非常独特的东西。

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

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

希望这有助于感谢

+0

微型(),我似乎无法更新您的答案中的小类型,但无论如何,谢谢你反正解决方案! – hobailey 2015-01-08 18:52:27

4

所有问题的答案可以结合简单就好了。但是,您可能没有想过的事情是当多个用户共享IP时发生的情况。例如,Google的所有员工或美国在线或Juno的所有用户都可以使用100 ips。如果他们每10到25天提供一次新IP,该怎么办?

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

我的建议:重新审视您的要求。你真的想完成什么?实施一个简单的Cookie来追踪独特的访问者可能会更好。它仍然不会100%准确(从网吧的所有用户使用同一台电脑支付的费用是多少)。但它会使代码更加复杂,不必为每个url附加所有额外的参数。

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

0

我的2美分是使用SQL表对:[id,ip]。
确保您对数据库的访问是“原子”的。
也就是说,没有人可以在您读取&可选写入数据库之间进入。
for more reading
get(ip)将返回id如果存在
或将生成一个新条目并将返回新的id(简单+1方法)。

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

0

此代码生成基于 device nameIP addressdevice language独特ID:

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