如何在javascript中生成唯一ID? [复制]
Posted
技术标签:
【中文标题】如何在javascript中生成唯一ID? [复制]【英文标题】:How to generate unique id in javascript? [duplicate] 【发布时间】: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,因此第一次调用会获得第二次调用的值,而您会得到一个副本。这可能是由全局变量或对闭包的误解引起的。没有你所有的代码,是不可能确定的。
【参考方案1】:
可以将数据库配置为对列使用自动生成的唯一值(主要是序列号)。您不必依赖客户端上的 javascript 来执行此操作。
【讨论】:
这里我想从 JavaScript 本身生成唯一的 id。我的代码有什么问题?以上是关于如何在javascript中生成唯一ID? [复制]的主要内容,如果未能解决你的问题,请参考以下文章