作者ian90911 (xopowo)
看板Web_Design
标题[问题] 如何避免因网速造成资料重复传送?
时间Thu Aug 28 16:04:20 2014
开发语言: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锁定存档钮
但交由使用者测试後仍然造成资料重复
想请问是否有防止这种状况下重复送出的做法呢?
--
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Web_Design/M.1409213062.A.46A.html
推 pm2001: 每次产生页面的时候作一个只能用一次的token 08/28 16:22
好像是个办法,来研究一下
1F:推 GoalBased: JS端党应该就没问题了 除非他妈的用512的RAM 08/28 19:00
2F:→ GoalBased: 或者是你前端档地方没写好 08/28 19:00
就...想不到问题在哪
整个画面就是一个存档钮,以及PANEL内的default button(按下enter),
能够触发存档事件的应该只有这个button的onclick event...
使用者网路环境好像是4M/1M,走VPN,
同时一个地方大概只有2~3人使用
3F:→ alog: CSRF 08/28 19:13
4F:→ alog: 防范 08/28 19:13
5F:→ alog: or 记录一下你的 Code 看哪里被触发多次 08/28 19:14
也是个方法,感谢回应
※ 编辑: ian90911 (182.235.161.52), 08/28/2014 20:05:47
6F:→ ian90911: 最後发现是临时改的一个东西让资料重复了 不是网速问题. 09/05 23:41