【问题标题】:JavaScript Unique Browser IdJavaScript 唯一浏览器 ID
【发布时间】:2011-06-23 14:03:44
【问题描述】:

是否可以在 javascript 中为浏览器创建唯一 ID?

我不是在谈论一个每次生成时都是随机的 ID,而是一个对于生成它的浏览器来说是唯一的 ID,但也会考虑到它运行的计算机。

例子:

Windows 7 Chrome 可能会生成:asdh128hakj4gh

Windows 7 Opera 可能会生成:23hjad823hjakk

Windows 7 Chrome,差异硬件,可能会生成:asd238881jaal

等等……

有没有办法做到这一点?

【问题讨论】:

  • 在 Windows 7 上运行 Chrome 的所有计算机的 ID 是否应该相同,或者您是否正在考虑类似于会话 ID 的 ID?
  • id 会因操作系统、硬件和浏览器而异,但如果在相同的操作系统硬件和浏览器上生成两次,则 id 会相同

标签: javascript unique generator uniqueidentifier


【解决方案1】:

您可以使用biri library。 ID 是每台计算机生成的,除非计算机的 MAC 地址发生变化,否则该 ID 不会发生变化。

【讨论】:

  • 很好的解决方案。但这是在 GPL 许可下。
  • 当我们将网络从一个更改为另一个时,id 也会发生变化。所以并不总是一样
  • 如果它在 GPL 许可下会有什么问题,@Roy?
  • @KarmaBlackshaw 我没有按照我的律师的建议使用 GPL 许可证。您可以与您的律师讨论同样的问题。您可能会发现这篇文章很有帮助:blog.jamesbayley.com/2014/01/17/gpl-living-with-cancer
  • @Roy 实现非常简单,你可以从内存中重新创建它
【解决方案2】:

看起来您正在尝试做的是某种许可?所以只能注册这么多浏览器来使用你的应用?

很遗憾,无法读取用户的计算机硬件设置。正如一个答案所说,您可以在机器上存储一个 cookie,但它很容易丢失。

如果您被限制使用旧的 IE 浏览器,您可以使用 ActiveX 来读取计算机硬件:http://www.devarticles.com/c/a/JavaScript/How-to-Use-JavaScript-for-Hardware-Knowledge/

【讨论】:

    【解决方案3】:

    您正在寻找的是所谓的浏览器指纹。

    您可以在 Google 上搜索一些开源库。 例如:fingerprintjs2

    查看EFF's demo

    【讨论】:

    • 在当前的 django 项目中使用指纹 js2 javascript 库,效果非常好...
    • 它似乎在最新版本的 Firefox 中不起作用。获取 Fingerprint2 未定义错误。检查这个valve.github.io/fingerprintjs2
    • 同一浏览器,同一版本,即使在不同的机器上,指纹也是一样的。
    【解决方案4】:

         var Sys = {};
            var ua = navigator.userAgent.toLowerCase();
            var s;
            (s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] :
            (s = ua.match(/firefox\/([\d.]+)/)) ? Sys.firefox = s[1] :
            (s = ua.match(/chrome\/([\d.]+)/)) ? Sys.chrome = s[1] :
            (s = ua.match(/opera.([\d.]+)/)) ? Sys.opera = s[1] :
            (s = ua.match(/version\/([\d.]+).*safari/)) ? Sys.safari = s[1] : 0;
    
       
            if (Sys.ie) document.write('IE: ' + Sys.ie);
            if (Sys.firefox) document.write('Firefox: ' + Sys.firefox);
            if (Sys.chrome) document.write('Chrome: ' + Sys.chrome);
            if (Sys.opera) document.write('Opera: ' + Sys.opera);
            if (Sys.safari) document.write('Safari: ' + Sys.safari);

    通过这些代码你可以得到浏览器的类型和版本,根据不同的浏览器,值应该是唯一的,如果你想根据它生成其他唯一的ID,那就用它

    【讨论】:

      【解决方案5】:

      UserAgent + ClientIP + 'extrasalt' 的 MD5 怎么样?

      这会让您接近但并不完美,因为 2 个客户端可能拥有相同的 IP(使用 NAT)和完全相同的 UserAgent(严格控制的 IT 部门 = 相同的部署,或者只是运气)。

      【讨论】:

      • -1:大多数客户端都有动态 IP,如果客户端保持相同的 IP 几天,你就很幸运了。因此,当 IP 更改时,您会错误地将新哈希视为新的浏览器实例。
      【解决方案6】:

      使用cookies 和一些独特的哈希值。 (每个浏览器都有自己的cookie jar,即使电脑上有很多浏览器)

      【讨论】:

      • 也许不是真的。我打开了一个 FireFox,在 cookie 中给了它一个随机 ID,打开了第二个 FireFox,它读取了相同的 cookie。
      • 是的,每个浏览器安装都有自己的cookie jar,而不是每个浏览器实例...
      • 我喜欢这个概念,但一些示例代码在这里会有所帮助。我应该如何使用随机哈希?作为某处的cookie主体或cookie名称?如果是名字,那我该怎么取回来呢?
      • 尝试使用例如 uuid 生成一些 id - 这是流行的 npm 包:npmjs.com/package/uuid 并将其保存为 cookie。你也可以使用 Js
      猜你喜欢
      • 1970-01-01
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 2014-02-27
      • 1970-01-01
      相关资源
      最近更新 更多