【问题标题】:How to generate unique id in javascript? [duplicate]如何在javascript中生成唯一ID? [复制]
【发布时间】:2016-08-21 10:56:04
【问题描述】:

我想记录网站的流量。在每次点击时,我都想生成将存储在数据库中的唯一 ID。 为了生成唯一的 ID,我在下面的代码中编写了代码,但有时我在数据库中得到了相同的条目。

 timingVar = 'load_'+Date.now()+'_'+uniqueid();

//function used to generate unique number//
function uniqueid() {
    var ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    var ID_LENGTH = 8;
    var rtn = '';
    for (var i = 0; i < ID_LENGTH; i++) {
      rtn += ALPHABET.charAt(Math.floor(Math.random() * ALPHABET.length));
    }
    return rtn;
}

【问题讨论】:

  • 如果您在服务器上生成此 ID,这将更合适。为每个用户设置一个会话,如果该用户第二次来,则记录它。
  • 我必须使用 java 脚本来获取唯一 ID,我的代码有什么问题。我的代码会产生重​​复的 id 吗?
  • 您的代码的问题在于它不能防止重复,并且没有足够大的随机字段。这就是为什么我们拥有强大的 UUID 算法。 36 ^ 8 远远不足以期望从中随机选择是唯一的,尤其是。在浏览器中使用不完美的伪随机数生成器时不会。
  • @PraveenD 没有更多信息,这可能不是您的唯一 ID 代码,而是您如何使用它。您的 id 中有Date.now,所以需要同时发出两个请求并获得相同的随机数?不太可能(但可能这就是为什么您应该查看 TJCrowder 的链接)。 但是我想你会发现即使你有一个真正唯一的 ID,你仍然会在数据库中得到重复的 ID。即这是另一个XY 问题。你也记录IP地址吗?是否来自同一 IP 的重复项?最重要的是,您的timingVar 是全球性的吗? (如问题中所述)。
  • 本质上,我是说您可能会在发送它之前覆盖您的timingVar,因此第一次调用会获得第二次调用的值,而您会得到一个副本。这可能是由全局变量或对闭包的误解引起的。没有你所有的代码,是不可能确定的。

标签: javascript jquery


【解决方案1】:

可以将数据库配置为对列使用自动生成的唯一值(主要是序列号)。您不必依赖客户端上的 javascript 来执行此操作。

【讨论】:

  • 这里我想从 JavaScript 本身生成唯一的 id。我的代码有什么问题?
猜你喜欢
  • 2010-11-15
  • 2012-03-21
  • 2015-09-22
  • 2012-04-27
  • 1970-01-01
  • 2014-05-02
  • 2011-09-25
  • 2018-05-04
  • 1970-01-01
相关资源
最近更新 更多