[問題] 如何避免因網速造成資料重複傳送?

作者: ian90911 (xopowo)   2014-08-28 16:04:20
開發語言:asp.net C# Web form
開發工具:visual studio 2010
功能簡介:
資料表:
[USER]
| USER_SID | USER_ID | USER_NAME |
[VALUE]
| VALUE_SID | USER_ID | VALUE_VALUE | VALUE_DATE |
資料流程:
一個表格(grid view)
顯示欄位:
| USER_NAME (Label) | VALUE_VALUE (TextBox)|
隱藏欄位:
| USER_ID | VALUE_SID |
一個存檔鈕(Button),grid view以panel包著,
Default Button為存檔鈕,在下面TextBox按下Enter可以觸發存檔
存檔時將有VALUE_SID的作update處理,無的作INSERT處理
以List<string> 將grid view row迴圈取值並建立:
INSERT部分: USER_ID LIST、VALUE_VALUE LIST
UPDATE部分: VALUE_SID、VALUE_VALUE LIST
在後端進行迴圈新增或更新
更新成功或失敗,以Message box顯示結果
問題:
使用者測試後發現連續按下Enter送出時資料會重複,
經分析發現為Insert處理要求連續送出造成,
改在存檔鈕事件裡第一行disable存檔鈕
但仍因網速使得第一行都沒有執行,就再次送出
再改成以javascript鎖定按鈕,js為local端處理應該無問題
開發端環境測試蓄意按下多次enter也無法「突破」js鎖定存檔鈕
但交由使用者測試後仍然造成資料重複
想請問是否有防止這種狀況下重複送出的做法呢?
作者: pm2001 (做個盾牌眼球兵吧)   2014-08-28 16:22:00
每次產生頁面的時候作一個只能用一次的token
作者: GoalBased (Artificail Intelligence)   2014-08-28 19:00:00
JS端黨應該就沒問題了 除非他媽的用512的RAM或者是你前端檔地方沒寫好
作者: alog (A肉哥)   2014-08-28 19:13:00
CSRF防範or 記錄一下你的 Code 看哪裡被觸發多次

Links booklink

Contact Us: admin [ a t ] ucptt.com