我陷入两难境地。我正在使用此代码生成唯一ID并将其存储在cookie或本地存储中。如果没有先前的ID设置,我只生成此ID。
//read the ID from cookie or local storage
var id=readID();
if(id==null){
//no ID found, generate an ID
id=generateID();
//store the ID to use it when we come back
storeID(id);
}
此代码的工作方式与我预期的大约90%的时间一样,只生成一个ID,但有时当没有ID的用户同时打开2个或更多选项卡(或者在非常短的时间间隔内)时,它最终生成2标识。 我感兴趣的是一些黑客策略,用于在读取,生成和存储ID时锁定代码,并且仅在一个选项卡中执行。直到锁被释放。
我知道这可能不起作用,因为标签是分开的,但我在想是否可以锁定本地存储对象以进行读写操作?
我也对其他解决方案持开放态度。
更新:我被问及generateID算法是怎样的。我说这没关系,但为了简化这一点,我们将使用Math.random()
这样:
function generateID(){
return Math.random();
}