在 PHP 中创建唯一用户指纹的方法

在PHP中生成用户唯一性的“指纹”的最佳方法是什么?

例如:

  1. 我可以使用用户的IP地址作为“指纹”,但是,同一IP上可能有多个其他用户
  2. 我可以使用用户的IP +用户代理作为“指纹”,但是,单个用户可以简单地从safari切换到firefox,并再次被视为唯一的。

理想情况下,指纹因此标记“机器”而不是浏览器或“ip”,但我想不出这是如何实现的。

接受有关如何唯一识别用户以及您的方法有哪些优点/缺点的想法/建议。


答案 1

最简单和最好的方法:使用phps会话管理 - 每个客户端都有一个ID,存储在cookie中(如果启用)或在每个链接和表单上作为get变量给出(或者你可以自己设置一个cookie)。但是,这只会“指纹”浏览器 - 如果用户更改浏览器,删除其cookie或其他任何内容,则您无法再识别它。

通过IP地址识别每个客户端通常是一个坏主意,并且不起作用。使用相同路由器的客户端将具有相同的 IP 地址 - 通过代理池连接的客户端在每次页面加载时都可能具有另一个 IP 地址。

如果您需要一个客户端无法以简单方式操作的解决方案,请尝试使用以下组合,使用客户端浏览器支持的所有功能,并在每次页面加载时进行比较:

  • “正常”的 HTTP Cookie
  • 本地共享对象(闪存 Cookie)
  • 使用 HTML5 Canvas 标记将 Cookie 存储在自动生成的强制缓存 PNG 的 RGB 值中,以读取像素 (Cookie)
  • 将 Cookie 存储和读出 Web 历史记录
  • 在 HTTP 标签中存储 Cookie
  • Internet Explorer userData Storage
  • HTML5 会话存储
  • HTML5 本地存储
  • HTML5 全球存储
  • HTML5 Database Storage via SQLite

有一个名为evercookie的解决方案可以实现所有这些。


答案 2

还有其他一些需要考虑的事情,用户的公共IP地址也可以在每次页面加载中更改。
有多个组织在路由器中切换公共 IP 以平衡流量。


推荐