使用PHP确定唯一用户(不使用cookies、IP地址)

3
这是一个非常广泛的问题;我只是在寻找最好的方法来做到这一点。
我想能够区分一个“唯一的用户”。我需要跟踪用户访问特定页面的时间。
以下是我和其他人遇到的问题:
- 使用“IP地址”不太有效,因为可能有许多计算机使用同一个“IP地址” - 如果用户在给定时间内清除了他/她的Cookie,则使用“COOKIES”会遇到问题。 - 使用“SESSIONS”可能会遇到问题,如果会话过期。
我考虑将所有三者结合起来,但我仍然相信这样做不能涵盖所有的例外情况。我需要一个类似于“Youtube”跟踪视频观看次数的系统。
除了实施用户系统之外,是否有其他任何想法呢?

1
这个用例是什么?我的意思是,它是用于进行一些相当不重要的投票,还是追踪页面访问量,或者是一些非常重要的东西?编辑:抱歉我没有看到:“我需要能够跟踪用户访问特定页面的时间。”所以这只是为了监视页面浏览量还是什么?如果是这种情况,我会选择使用 cookie,你的数据仍然会大致准确,这很好,人们不会故意滥用它。 - Wesley Murch
如果您想确保识别他们,那么请让他们使用用户名和密码进行注册和登录。 - raygo
你可以有多个选项,每个选项都有不同的缺点和命中率。但可能已经有关于这个问题的一些讨论了。 - Nanne
@user1477388 我想要能够追踪未登录用户的浏览量(例如图片浏览量,但是要唯一)。 - mlishn
@WesleyMurch没错,我只是想做一个简单的跟踪,用于查看内容,比如图片和视频。一个很好的例子就是YouTube用来追踪视频观看次数的方法。 - mlishn
显示剩余5条评论
3个回答

2

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

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

session_start();
$id = session_id();

这的好处是,只要用户会话保持活动状态,您就能够跟踪当前用户。
缺点是,如果“新用户”是旧用户,其会话已经清除(就像用户清除了他们的cookie)那么您将无法确定它是否是唯一的。
另一种选择是尝试使用来自$_SERVER环境信息的不同变量进行最佳指纹算法。
$userFingerprint = $_SERVER['REMOTE_ADDR'] . ':' . $_SERVER['HTTP_USER_AGENT'] . ':' . $_SERVER['HTTP_ACCEPT']; // plus any others you might find helpful

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

1

我认为,没有绝对的方法来做到这一点。用户可以更改IP地址,删除或更改Cookie等,因为所有东西都在他们手中。

但根据您计划使用的系统(投票、计数器),您可以开发一种确定唯一用户的方法。例如,要开发投票系统,您可以将IP、http_user_agent插入数据库,并且为了提高质量,您可以设置一些cookie。


1
另一种方法可能是在您的数据库中创建一个表,捕获以下数据:
  • IP地址
  • 操作系统/浏览器等(任何其他特定于该用户的信息)
然后,您可以缩小范围并说:“在这个特定的IP地址上使用这个特定的操作系统和浏览器的用户在这个特定的时间下载了这个图像。”
这就是您想要实现的吗?

我理解,但是我不知道除了使用cookies、sessions或记录特定信息(如$_SERVER数据)之外,你还能用什么方式来识别用户。 - user1477388
没错,我也不知道,所以我希望这里有人知道。我相信Youtube的做法几乎没有错误的余地,那就是我想要的方式。 - mlishn
也许YouTube采用多种方法,例如如果Cookie已被删除,则尝试下一个最佳选项? - user1477388
如果我要猜的话,他们会同时使用这三个元素,并将它们与某种数据库表相关联以保持一致性。例如,如果 cookie 是在 IP 地址(在表中)上创建的,并且具有当前会话,则......或者如果 cookie 与 IP 地址匹配且没有当前会话,则创建会话等等。 - mlishn
是的,那很简单。如果每个用户都有一个ID,那么跟踪他们的操作就很容易了。我正在努力想出如何处理随机观众(未注册会员)。这仅仅是为了追踪浏览次数。 - mlishn
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接