[问题] 如何避免因网速造成资料重复传送?

楼主: 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