PHP唯一计算机标识符

4

是否可能使用php(或在最坏情况下使用javascript)为用户创建一个不依赖于cookie或ip的唯一标识符?我在myminicity.com上看到,每个城市的计数器每天只会增加一次(它似乎为每个人都有一个唯一的标识符),即使我删除了我的cookies并刷新了ip,它仍然似乎能够检测到我已经访问过了,我想为自己创建这个系统。我看到很多人说这是不可能的,如果真的不可能,那么最好的替代方案是什么?

编辑

现在我想到了一个主意,我可以使用多个cookie(具有多种身份验证方法)、多个本地存储值(与cookie相同)、mysql数据库ip跟踪和flash cookie的混合,并且如果发现其中任何一个,就表示用户今天之前已经访问过。


可以基于其他因素创建一个相对独特的ID,但在我看来,如果您不使用cookie或IP地址,仍然存在两个访问者生成相同ID的可能性。正如Gumbo所述(带有链接),有各种网站报告系统的唯一性。我认为这是关键-系统在特定网站上的唯一性,而不一定是整个世界。然后还有Flash cookie等等... - MrWhite
4个回答

5

用户代理向服务器发送了几个信息。例如,可以查看Panopticlick以查看您的浏览器有多独特。另一个选项是使用Flash cookies,这些cookies更难被拒绝和删除。


Panopticlick给了我很多灵感,但这可能会过于复杂...Flash cookie确实更难删除,但最终仍然可破解。 - nebkat
@Neb:没有什么解决方案是无法被破解的。即使是MAC地址也可以被篡改。而Panopticlick只应该展示用户代理发送的信息,而不让用户知道。由于它不能确定用户身份,因此在这种情况下,隐藏的Flash Cookie可能是最好的解决方案。 - Gumbo

1

你可以为每台计算机生成一个GUID,假设你能找到某种存储方式,使得用户无法删除它(祝你好运)。

大多数执行此类操作的网站将IP地址存储在服务器上的数据库中,并以此方式识别“用户”。使用JavaScript,您可以结合IP地址和MAC地址,以允许NAT网关后面的多个人。


我该如何获取 MAC 地址? - nebkat
我认为只有IE可以做到,而我正在工作的网站不支持IE(它是HTML5)。 - nebkat

1

myminicity.com使用您的IP范围来检测您从哪个地区进入...这被称为基于IP的地理定位。有免费和付费的服务可供选择。请搜索“基于IP的地理定位”...您可以在http://en.wikipedia.org/wiki/Geolocation_software了解更多信息。


我知道脚本可以将例如123.456.789.012转换为伦敦,但伦敦有成千上万的人。我还没有看到比城市名称更具体的IP地理位置信息。我知道谷歌地图有很好的检测功能,但我看到的结果非常不清晰,多个人可能在同一区域。 - nebkat

0

一些$_SERVER变量可用于生成计算机ID。例如:

$id = $_SERVER['HTTP_USER_AGENT'].$_SERVER['LOCAL_ADDR'].$_SERVER['LOCAL_PORT'].$_SERVER['REMOTE_ADDR'];

$_SERVER 的值可以被伪造,但它仍然会增加一层不依赖于 cookie 或 IP 地址的安全性。


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