使用 PHP 确定唯一用户(无 cookie、IP 地址)


Determining a unique user (w/o cookies, ip address) using PHP

这是一个非常广泛的问题;我只是在寻找最好的方法。

我希望能够区分unique user。我需要能够跟踪用户何时访问特定页面。

以下是我和其他人遇到的问题:

  • 使用IP address无效,因为IP address上可能有许多计算机
  • 如果用户在给定的时间段内清除他/她的 cookie,则使用 COOKIES 会遇到问题。
  • 如果会话过期,使用 SESSIONS 会遇到问题。

我正在考虑将这三者结合起来,但我仍然很确定这不会涵盖所有异常。我需要一个类似于 Youtube 跟踪其视频观看次数的系统。

有人对此有其他想法吗?(除了实现用户系统)

如果不使用 cookie/要求用户登录以识别自己的身份 - 确定它们是否"唯一"几乎是不可能的。有几种方法可以提供帮助,但两者都不能保证:

您可以使用PHP会话 - 不需要实际的"用户管理系统"。

session_start();
$id = session_id();
  • 这样做的好处是,只要当前用户的会话保持活动状态,您就可以跟踪他们。

  • 缺点是,您将无法确定"新用户"是否是唯一的,如果它是已清除会话的旧用户(就像用户已清除其cookie一样)。

另一种方法(但也与仅使用 IP 地址相同)是尝试使用$_SERVER环境信息中的不同变量的最佳指纹识别算法:

$userFingerprint = $_SERVER['REMOTE_ADDR'] . ':' . $_SERVER['HTTP_USER_AGENT'] . ':' . $_SERVER['HTTP_ACCEPT']; // plus any others you might find helpful
  • 这样做的好处是,可能有足够的数据来区分同一网络上的用户。

  • 明显的缺点是,可能没有足够的数据来区分同一网络上的用户。

我认为

,没有任何绝对的方法可以做到这一点。用户可以更改IP地址,删除或更改cookie等,因为一切都在他们手上。

但是根据您正在规划的系统(轮询,计数器),您可以开发一种确定唯一用户的方法。例如,要开发民意调查系统,您可以将ip,http_user_agent插入数据库,并且为了提高质量,您可以设置一些cookie。

另一种方法是在数据库中创建一个表,捕获以下数据:

  • IP地址
  • 操作系统/浏览器等(任何其他信息会特定于该用户)

然后,您可以缩小范围并说:"此特定 IP 地址的用户在此特定浏览器上使用此特定操作系统在此特定时间下载了此映像。

这是你想要实现的吗?