在这种情况下唯一识别用户的最佳方法是什么?

Best way to uniquely identify a user in this case?

我将在 iframe 中的站点上使用代码 运行ning,它可能跨域也可能不跨域,并且可能在多个 iframe 中重复。我可能在顶部 window 中有代码 运行ning,但我可能没有。我希望我的 JS 生成一个唯一标识符,如果它是由我的代码在该页面上的任何 iframe、多个 iframe、嵌套在 iframe 中的 iframe 或顶部 window 中生成的,则该标识符将始终相同仅加载主页。

当 运行 在当时为该用户加载该网页的任何 window 上下文中时,它应该生成相同的标识符。因此,如果删除了一个 iframe,添加的另一个 iframe 应该会生成相同的 id。

对此最好的信息是什么?它本质上是一个 'session' id,但需要在浏览器中生成,并且对于生成它的任何子 iframe 都是相同的。感谢任何可以提供帮助的人!

我不是 100% 确定这是否能回答您的问题,但我生成随机字符串的首选方法部分受到 MongoDB 生成唯一对象 ID 的方法的启发:

var uniqueString = Date.now().getTime() + Math.random();

除非你有成千上万的用户在完全相同的毫秒内全部运行这个代码,否则你应该相当保证一个随机字符串。

编辑

问题在顶部 window 中提到了 运行 代码。有了这个,有多种解决方案可以工作:

  • 使用 PostMessage API 向页面上的所有 iframe 发送相同的随机 ID
  • 使用随机 id 作为查询字符串部署 iframe(例如 http://www.example.com/mypage?id=123

但是,如果您无法在顶部执行代码 window,您将不得不在服务器端执行操作。在这里我不太确定我会怎么做,因为我不确定你在后端使用什么,但在 Node.js 中你可以检查 req 对象。它将包含用户的 IP 地址、他们的用户代理字符串、请求日期等内容。连接 IP 地址、用户代理字符串以及可能的引用页面(即您的用户正在查看的加载 iframe 的页面)应该给出给定用户给定页面上所有框架的唯一 ID。

经过一些阅读,似乎制作浏览器指纹将是解决方案。这些 github 个项目很有帮助:

我可能会使用其中之一,或者获得一些实施我自己的简化解决方案的想法。