外刊IT评论:防止表单重复提交的几种策略

oschina
 oschina
发布于 2013年11月13日
收藏 222

表单重复提交是在多用户Web应用中最常见、带来很多麻烦的一个问题。有很多的应用场景都会遇到重复提交问题,比如:

  • 点击提交按钮两次。
  • 点击刷新按钮。
  • 使用浏览器后退按钮重复之前的操作,导致重复提交表单。
  • 使用浏览器历史记录重复提交表单。
  • 浏览器重复的HTTP请求。

几种防止表单重复提交的方法

禁掉提交按钮。表单提交后使用Javascript使提交按钮disable。这种方法防止心急的用户多次点击按钮。但有个问题,如果客户端把Javascript给禁止掉,这种方法就无效了。

我之前的文章曾说过用一些Jquery插件效果不错。

Post/Redirect/Get模式。在提交后执行页面重定向,这就是所谓的Post-Redirect-Get (PRG)模式。简言之,当用户提交了表单后,你去执行一个客户端的重定向,转到提交成功信息页面。

这能避免用户按F5导致的重复提交,而其也不会出现浏览器表单重复提交的警告,也能消除按浏览器前进和后退按导致的同样问题。

在session中存放一个特殊标志。当表单页面被请求时,生成一个特殊的字符标志串,存在session中,同时放在表单的隐藏域里。接受处理表单数据时,检查标识字串是否存在,并立即从session中删除它,然后正常处理数据。

如果发现表单提交里没有有效的标志串,这说明表单已经被提交过了,忽略这次提交。

这使你的web应用有了更高级的XSRF保护。

在数据库里添加约束。在数据库里添加唯一约束或创建唯一索引,防止出现重复数据。这是最有效的防止重复提交数据的方法。

你是如何克服数据重复提交问题的?你遇到过什么重复提交数据的现实例子吗?

[英文原文: Prevent Duplicate Form Submission ]

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:外刊IT评论:防止表单重复提交的几种策略
加载中

最新评论(60

实迷途其未远觉今是而昨非
实迷途其未远觉今是而昨非
测试重复提交
kookob
kookob

引用来自“justintung”的评论

引用来自“hanzhankang”的评论

干什么都放在session里,是不是太懒了

那你打算放哪里?

如果都丢到session,如果用户打开这页面,又不提交的话,那这个session不是删不掉而一直存在了?

Zoker
Zoker

引用来自“刘学炜”的评论

引用来自“Silentboy”的评论

引用来自“刘学炜”的评论

引用来自“刘学炜”的评论

引用来自“刘学炜”的评论

呵呵

方法

发顺丰

好的,亲,顺丰包邮,十盒大象

土包子

没有包子卖呦亲
刘学炜
刘学炜

引用来自“Silentboy”的评论

引用来自“刘学炜”的评论

引用来自“刘学炜”的评论

引用来自“刘学炜”的评论

呵呵

方法

发顺丰

好的,亲,顺丰包邮,十盒大象

土包子
Zoker
Zoker

引用来自“刘学炜”的评论

引用来自“刘学炜”的评论

引用来自“刘学炜”的评论

呵呵

方法

发顺丰

好的,亲,顺丰包邮,十盒大象
刘学炜
刘学炜

引用来自“刘学炜”的评论

引用来自“刘学炜”的评论

呵呵

方法

发顺丰
刘学炜
刘学炜

引用来自“刘学炜”的评论

呵呵

方法
刘学炜
刘学炜
呵呵
牧哥
牧哥
嗯,这个也是我需要的,我目前的解决办法是用遮罩来让客户不继续点击。不知道还有没有更好的办法!
钱途无梁
钱途无梁
表单多次提交有错吗?就像修改个人资料一样,为什么不能多次修改?大家没理解作者的意思,人家说的是两次表单提交速度太快
返回顶部
顶部