javascript - 注冊(cè)時(shí)同一個(gè)用戶注冊(cè)多回,數(shù)據(jù)庫(kù)中也出現(xiàn)多條一樣的數(shù)據(jù),后臺(tái)已經(jīng)進(jìn)行了校驗(yàn),前臺(tái)js也限制了兩秒提交一次,但是還是會(huì)出現(xiàn)多條
問(wèn)題描述
注冊(cè)時(shí)同一個(gè)用戶注冊(cè)多回,數(shù)據(jù)庫(kù)中也出現(xiàn)多條一樣的數(shù)據(jù),后臺(tái)已經(jīng)進(jìn)行了校驗(yàn),前臺(tái)js也限制了兩秒提交一次,但是還是會(huì)出現(xiàn)多條
問(wèn)題解答
回答1:前端可以在進(jìn)入頁(yè)面的時(shí)候設(shè)置注冊(cè)按鈕可以點(diǎn)擊,在點(diǎn)擊發(fā)送注冊(cè)請(qǐng)求的時(shí)候先把注冊(cè)按鈕設(shè)置成不可點(diǎn)擊,等請(qǐng)求回來(lái)假設(shè)注冊(cè)失敗,則把按鈕再設(shè)置成可以點(diǎn)擊。
回答2:數(shù)據(jù)庫(kù)中用唯一索引作限制
回答3:不知道你是用debouce還是throttle限制兩秒提交的
比較好的做法是點(diǎn)擊注冊(cè)把按鈕禁用掉,等請(qǐng)求返回再在回調(diào)函數(shù)啟用按鈕,記得報(bào)錯(cuò)的回調(diào)也要啟用注冊(cè)按鈕
后端數(shù)據(jù)庫(kù)字段也要做唯一索引
回答4:服務(wù)端校驗(yàn)需要作唯一性的判斷;前端按鈕點(diǎn)擊后禁止點(diǎn)擊,等待服務(wù)端返回后解除禁止點(diǎn)擊,或者通過(guò)超時(shí)方式來(lái)實(shí)現(xiàn)
回答5:注冊(cè)必須要做唯一驗(yàn)證
回答6:數(shù)據(jù)庫(kù)加用戶名主鍵唯一驗(yàn)證呀
回答7:前端禁用按鈕的方案雖然也是必需的,但是這個(gè)僅僅只是避免普通用戶多次點(diǎn)擊而已,不能阻止非瀏覽器的‘用戶’不管服務(wù)器接受了多少次重復(fù)的請(qǐng)求,必須后端進(jìn)行處理目的是同一個(gè)用戶只能注冊(cè)一次,參考其他回答,主鍵
回答8:參考我的文章Web項(xiàng)目如何防止客戶端重復(fù)發(fā)送請(qǐng)求
