聊一聊開發(fā)中如何防止表單重復(fù)提交(1)

場(chǎng)景:在項(xiàng)目開發(fā)中,我們經(jīng)常會(huì)聽到測(cè)試人員抱怨葡盗,我提交表單螟左,表單窗口沒(méi)有及時(shí)關(guān)閉,沒(méi)反應(yīng)觅够,又點(diǎn)擊了一下提交路狮,結(jié)果插入兩條一模一樣的數(shù)據(jù)。其實(shí)蔚约,我們遇到重復(fù)提交的場(chǎng)景大多數(shù)都是這種原因奄妨,今天我們就來(lái)聊一下,如何用最簡(jiǎn)單的方式處理它吧苹祟。

分析原因:如上場(chǎng)景砸抛,可能就是網(wǎng)絡(luò)原因或者其他XXX原因评雌,后臺(tái)數(shù)據(jù)沒(méi)有及時(shí)返回,導(dǎo)致前端頁(yè)面窗口沒(méi)有關(guān)掉直焙。

處理方式1: ?修改頁(yè)面景东,給提交按鈕加個(gè)禁用屬性,亦或者是加個(gè)什么loading的樣式啊奔誓,反正不允許用戶重復(fù)點(diǎn)擊(不推薦)

????具體實(shí)現(xiàn):用戶一點(diǎn)提交斤吐,我就通過(guò)js禁用掉該按鈕不能操作,ajax請(qǐng)求響應(yīng)了厨喂,再把禁用打開和措,用戶(正常用戶,不包括那種直接通過(guò)瀏覽器url來(lái)攻擊你服務(wù)器的用戶)講道理不可能重復(fù)提交蜕煌。呵呵派阱,就是這樣,我后臺(tái)不需要改任何代碼斜纪,分分鐘搞定贫母。我定義為最簡(jiǎn)單的方式,有時(shí)候應(yīng)急這樣做也是可以的嘛盒刚。

優(yōu)點(diǎn):簡(jiǎn)單腺劣,快速,高效因块,應(yīng)急

缺點(diǎn):1橘原,在頁(yè)面上做的這些驗(yàn)證啊,操作啊贮聂,大家懂得靠柑,不安全。

? ? ? ? ? ? 2吓懈,別人太容易攻擊你的網(wǎng)站了歼冰,別人就一直用工具給你重復(fù)提交,不就完了嗎耻警。

處理方式2: 數(shù)據(jù)庫(kù)唯一索引控制(推薦隔嫡,簡(jiǎn)單,可以不用考慮什么分布式啊甘穿,集群啊腮恩,不同用戶并發(fā)操作啊,因?yàn)橹苯釉跀?shù)據(jù)庫(kù)做驗(yàn)證)

具體實(shí)現(xiàn):既然你要插入重復(fù)數(shù)據(jù)温兼,好吧秸滴,我加個(gè)唯一索引,數(shù)據(jù)庫(kù)插入報(bào)錯(cuò)募判,提示 “重復(fù)提交”不就行了嗎荡含。新建一個(gè)字段來(lái)處理咒唆,這個(gè)字段就把它作為唯一索引,UUID或者時(shí)間戳都是可以的释液。那我們可以每次在彈出提交頁(yè)面表單的時(shí)候全释,在后臺(tái)生成一個(gè)唯一索引比如UUID,傳給前端误债,前端提交帶上UUID浸船,我們直接在數(shù)據(jù)庫(kù)保存即可,試想寝蹈,你不刷新頁(yè)面李命,猛點(diǎn)提交按鈕的情況下,每次傳到后臺(tái)的UUID都是同一個(gè)躺盛,直接存數(shù)據(jù)庫(kù)项戴,報(bào)錯(cuò)形帮,提示就完了槽惫。

? ? ? ? 優(yōu)點(diǎn):還是簡(jiǎn)單,快速辩撑,高效界斜,應(yīng)急(不需要引進(jìn)其他任何技術(shù),后臺(tái)代碼也只是加個(gè)try catch而已)

????????缺點(diǎn):1,狂點(diǎn)按鈕合冀,增加數(shù)據(jù)庫(kù)壓力各薇,還有處理方式1的第三個(gè)缺點(diǎn)

? ? ? ? ? ? ? ? ? ? 2,系統(tǒng)中有很多表單提交按鈕君躺,我都需要去加個(gè)莫須有的字段(當(dāng)然峭判,你要是比較勤奮,可以忽略棕叫,但是我覺得這點(diǎn)是比較煩人的林螃,數(shù)據(jù)庫(kù)侵入性高)

? ? ? ? ? ? ? ? ? ? 3,數(shù)據(jù)庫(kù)要是由于各種原因響應(yīng)慢俺泣,用戶確得不到任何提示(當(dāng)然疗认,這點(diǎn)我認(rèn)為不重要)

????????????????????4,通過(guò)數(shù)據(jù)庫(kù)驗(yàn)證伏钠,在性能横漏,速度上都不是最優(yōu)的,比如你連續(xù)點(diǎn)兩次提交熟掂,可能不會(huì)及時(shí)響應(yīng)提示缎浇,但是至少數(shù)據(jù)不會(huì)出問(wèn)題(這個(gè)缺點(diǎn),看項(xiàng)目情況吧赴肚,我覺得還OK)

總結(jié):我個(gè)人不建議使用第一種方式素跺,建議使用第二種方式鹏秋,更建議使用第一種+第二種的組合方式,組合方式有個(gè)好處就是亡笑,用戶不可能出現(xiàn)狂點(diǎn)按鈕的操作侣夷,也就不可能給數(shù)據(jù)庫(kù)造成太大的壓力,綜上仑乌,還是要根據(jù)自己項(xiàng)目的實(shí)際業(yè)務(wù)場(chǎng)景來(lái)做出最優(yōu)選擇百拓。一般用戶量不大,并發(fā)不高的系統(tǒng)晰甚,推薦組合使用衙传。當(dāng)然并發(fā)高,兩種方式我都不建議使用厕九,畢竟第二種是直接操作數(shù)據(jù)庫(kù)蓖捶,壓力大,還可能不能及時(shí)響應(yīng)給用戶扁远。

綜上俊鱼,并發(fā)小,用戶量小畅买,(還要根據(jù)實(shí)際業(yè)務(wù)場(chǎng)景)推薦使用組合方式并闲,因?yàn)楹?jiǎn)單啊,思路簡(jiǎn)單明了谷羞,第二種方式直接操作數(shù)據(jù)庫(kù)帝火,說(shuō)白了就是個(gè)悲觀鎖(當(dāng)然并不是鎖,只是比喻)湃缎,不管你是集群還是分布式犀填,都是OK的,推薦嗓违!

好了九巡,今天簡(jiǎn)單方式解決防重復(fù)提交介紹到這,其實(shí)我覺得一般項(xiàng)目就用組合方式很OK的靠瞎,后期文章還會(huì)介紹其他方式比庄,敬請(qǐng)期待。乏盐。佳窑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市父能,隨后出現(xiàn)的幾起案子神凑,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件溉委,死亡現(xiàn)場(chǎng)離奇詭異鹃唯,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)瓣喊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門坡慌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人藻三,你說(shuō)我怎么就攤上這事洪橘。” “怎么了棵帽?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵熄求,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我逗概,道長(zhǎng)弟晚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任逾苫,我火速辦了婚禮卿城,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘隶垮。我一直安慰自己藻雪,他們只是感情好秘噪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布狸吞。 她就那樣靜靜地躺著,像睡著了一般指煎。 火紅的嫁衣襯著肌膚如雪蹋偏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天至壤,我揣著相機(jī)與錄音威始,去河邊找鬼。 笑死像街,一個(gè)胖子當(dāng)著我的面吹牛黎棠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播镰绎,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼脓斩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了畴栖?” 一聲冷哼從身側(cè)響起随静,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后燎猛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恋捆,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年重绷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沸停。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昭卓,死狀恐怖星立,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情葬凳,我是刑警寧澤绰垂,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站火焰,受9級(jí)特大地震影響劲装,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜昌简,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一占业、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纯赎,春花似錦谦疾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至晚顷,卻和暖如春峰伙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背该默。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工瞳氓, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人栓袖。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓匣摘,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親裹刮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子音榜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 在平時(shí)開發(fā)中,如果網(wǎng)速比較慢的情況下必指,用戶提交表單后囊咏,發(fā)現(xiàn)服務(wù)器半天都沒(méi)有響應(yīng),那么用戶可能會(huì)以為是自己沒(méi)有提交表...
    重山楊閱讀 1,746評(píng)論 5 26
  • 一. 表單設(shè)計(jì)的影響與原則 1.1 表單的產(chǎn)生 由內(nèi)而外,網(wǎng)站根據(jù)自身信息存儲(chǔ)格式要求梅割,從數(shù)據(jù)庫(kù)映射成表單霜第。 由外...
    曉夢(mèng)蟬君閱讀 12,034評(píng)論 1 30
  • 在火車上。窗外户辞,除了的深淺交錯(cuò)的田野能偶爾吸引小多的目光外泌类,別的似乎都沒(méi)有引起他的興趣,直到遠(yuǎn)處出現(xiàn)了一間水泥廠底燎,...
    麥?zhǔn)搴托←?/span>閱讀 233評(píng)論 0 9
  • 許雯的備注都是張學(xué)弟(洛杉磯一套別墅)刃榨,王靜(上海兩套一百平精裝)之類的備注。 “嘩啦”一陣文件夾倒在辦公桌上的聲...
    楠楓先生閱讀 443評(píng)論 1 2
  • 文 | 昆南 參賽編號(hào):830 念我平常居 氣結(jié)不能言——曹植 人結(jié)婚時(shí)双仍,要置辦家具枢希。大多數(shù)人,也只有這時(shí)才...
    昆南閱讀 344評(píng)論 6 20