時間戳與唯一標識

2022-02-09 04:12:42 字數 1711 閱讀 1301

比較懶,好久沒寫部落格了,昨天遇到個問題隨手記錄一下

以前沒遇到這個問題,一直以為時間戳是可以作為類似於主鍵一樣的唯一標識。直到昨天遇到個老專案,出了個奇怪的bug。

專案是別人做的老專案,我們在修改,昨天測試告知說某輸入框,有時候能輸入東西,有時候內容會被清空。

看了頁面,清空的很明顯是表單驗證控制項型別錯誤,本來該是單純必填的文字

,變成了數字

。問題在於這個有時候會變,有時候不會。

該開始對於問題的定位方向不對,以為是所用外掛程式版本過老,外掛程式的問題。

費老大勁檢視壓縮的**、跟斷點,卻發現所有呼叫控制項的,都是有控制項特定class的元素,並沒有問題,然後懷疑不是外掛程式問題,是呼叫之前就出問題了。

在外掛程式數字控制項numberbox初始化的地方用了console.trace(),檢視呼叫棧

發現第一次非控制項呼叫檔案是utils.js 進去以後檢視**,果然發現了問題
function

initvalidatebox(parent) ]")[0];

var ntime = new

date().gettime();

$(n).attr("autovali", ntime);

var ecss =;

var csss = $(n).attr("class").split(" ");

$.each(csss,

function

(ci, css)

});if (ecss && ecss.length > 0)

catch

(e)

});}

}});}}

//

方法不複雜,關鍵在於下面的幾行**

var ntime = new

date().gettime();

$(n).attr("autovali", ntime);..

.//

意識到問題所在,驗證是否正確。把斷點打在這個方法裡,多次觸發,直到出現bug時慢慢跟。頓時發現錯誤原因

原來,在**中時間戳並不唯一。應該是現如今電腦執行速度已經很快,迴圈中兩個相鄰元素加上的時間戳有可能一樣。

這就導致了當迴圈到第二個元素(市場價),給其初始化時,$('[autovali=\"" + $(n).attr("autovali") + "\"]')選擇了兩個元素,

從而導致前乙個元素(屬性名稱)使用的控制項種類(文字),被後乙個元素的控制項種類(數字)覆蓋。也就導致了時隱時現的bug。畢竟並不是每一次迴圈都出現相鄰元素加上的時間戳一樣。

問題找到就好解決了,我選擇最省時省力的

//

$(n).attr("autovali", ntime);

$(n).attr("autovali", ntime + "" + math.floor(math.random()*1000));

//把標識由時間戳,改為時間戳加隨機1-3位的數字

總結,時間戳並不適合單獨作為唯一標識,尤其是迴圈中加的時間戳

以使用者唯一識別符號與當前時間戳進行DES加密

第一步 編寫tokenproccessor演算法類 初始化引數 public static final string key algorithm des 加密key,長度為8位 public static final string key public static final string pre...

Android唯一標識

github位址 android中能作為唯一標識有四個,但付出一定的代價還是還是能改變,所以目前android中沒有絕對的唯一標識。1 裝置id imei 需要授予許可權 telephonymanager telephonymanager telephonymanager getsystemserv...

全球唯一標識GUID

guid global unique identifier 全域性唯一識別符號,它是由網絡卡上的標識數字 每個網絡卡都有唯一的標識號 以及 cpu 時鐘的唯一數字生成的的乙個 16 位元組的二進位制值。guid 的格式為 xx x x x 其中每個 x 是 0 9 或 a f 範圍內的乙個十六進製制...