【问题标题】:Determining a unique user (w/o cookies, ip address) using PHP使用 PHP 确定唯一用户(无 Cookie、IP 地址)
【发布时间】:2012-08-15 15:09:47
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 用例是什么?我的意思是,它是为了在一些相当微不足道的民意调查中投票,还是为了增加页面访问量,或者一些非常重要的事情?编辑:对不起,我没有读到:“我需要能够跟踪用户何时访问特定页面。”所以它只是为了监控页面浏览量还是什么?如果是这种情况,我只会使用 cookie,您的数据仍然大部分准确,这很好,人们不会故意滥用它。
  • 没错,如果这很重要,那么他们可能应该有一个登录名。在这种情况下,识别用户就像登录一样简单。
  • 这根本不可能,尤其是不可靠(如您所愿),除非您让人们表明自己的身份(例如登录)。
  • 如果一个用户在同一个浏览器中打开了 2 个标签页,你想将它们识别为不同的用户吗?
  • 如果您想确定他们的身份,请让他们注册并使用用户名和密码登录。

标签: php cookies ip-address


【解决方案1】:

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

您可以使用PHP Sessions - 无需实际的“用户管理系统”。

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
  • 这样做的好处是,可能有足够的数据来区分同一网络上的用户。

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

【讨论】:

    【解决方案2】:

    我认为,没有任何绝对的方法可以做到这一点。用户可以更改 IP 地址、删除或更改 cookie 等,因为一切尽在掌握。

    但是根据您计划的系统(投票,计数器),您可以开发一种确定唯一用户的方法。比如开发一个投票系统,可以在数据库中插入ip、http_user_agent,也可以设置一些cookie来提高质量。

    【讨论】:

      【解决方案3】:

      另一种方法可能是在您的数据库中创建一个表来捕获以下数据:

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

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

      这是你想要达到的目标吗?

      【讨论】:

      • 我知道,但我试图通过添加其他字段来解决这个问题,您可以缩小范围。很抱歉,如果您不信任 IP 地址,这可能是确定特定用户的唯一方法。
      • 我可以使用所有$_SERVER 选项,但这仍然不会区分用户。想象一下图书馆中的一组用户使用相同的操作系统在一个 IP 地址上。
      • 我明白,但我不知道您如何在不使用 cookie、会话或记录有关用户的特定信息(例如他们的 $_SERVER 数据)的情况下识别用户。
      • 对,我也不知道,这就是为什么我希望这里有人知道。我很确定 Youtube 的做法出错的空间很小,这就是我正在寻找的方式
      • 也许,youtube 会结合多种方法,即如果 cookie 已被删除,请尝试下一个最佳选项?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      • 1970-01-01
      • 2011-06-08
      • 2021-08-04
      • 2013-09-21
      • 2017-01-09
      相关资源
      最近更新 更多