|
一、有很多的应用场景都会遇到重复提交问题,比如:
1、点击提交按钮两次。 2、点击刷新按钮。 3、使用浏览器后退按钮重复之前的操作,导致重复提交表单。 4、使用浏览器历史记录重复提交表单。 5、浏览器重复的 HTTP 请求。
二、防止表单重复提交的方法
1、禁掉提交按钮
表单提交后使用 Javascript 使提交按钮disable。这种方法防止心急的用户多次点击按钮。但有个问题,如果客户端把 Javascript 给禁止掉,这种方法就无效了。
2、Post/Redirect/Get 模式
在提交后执行页面重定向,这就是所谓的 Post-Redirect-Get (PRG)模式。简言之,当用户提交了表单后,你去执行一个客户端的重定向,转到提交成功信息页面。
这能避免用户按 F5 导致的重复提交,而其也不会出现浏览器表单重复提交的警告,也能消除按浏览器前进和后退按导致的同样问题。
3、在数据库里添加约束
在数据库里添加唯一约束或创建唯一索引,防止出现重复数据。这是最有效的防止重复提交数据的方法。
参考资料: 如何防止表单重复提交 http://www.studyofnet.com/news/287.html
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
返回顶楼 |
|
|
- sweat89
- 等级: 初级会员
- 性别:
- 文章: 253
- 积分: 40
- 来自: 深圳
|
token呢?
|
返回顶楼 |
|
|
- yelangking
- 等级: 初级会员
- 性别:
- 文章: 5
- 积分: 30
- 来自: 南京
|
token 这样的令牌机制确实蛮好的,只不过spring mvc 的实现方式稍微复杂一点,需要自己开发,而struts1 和struts2 都有完整的封装,使用起来非常简单。不过原理都是一样的
|
返回顶楼 |
|
|
- yuechen323
- 等级: 初级会员
- 性别:
- 文章: 29
- 积分: 50
- 来自: 北京
|
一般这2种方式结合使用: 1、禁掉提交按钮 2、Post/Redirect/Get 模式
ps:禁用js,那他在这个网站什么都干不了,因此不用担心这个
|
返回顶楼 |
|
|
- lvwenwen
- 等级: 初级会员
- 性别:
- 文章: 913
- 积分: 50
- 来自: 魔都
|
token
|
返回顶楼 |
|
|
- mfkvfn
- 等级: 初级会员
- 性别:
- 文章: 292
- 积分: 40
- 来自: 深圳
|
还有一种方法。提交时出现一个loading模态提示。 还有ajax提交+全局状态变量(控制ajax提交是通过还是拒绝)
|
返回顶楼 |
|
|
- caizi12
- 等级:
- 性别:
- 文章: 400
- 积分: 110
- 来自: 北京
|
发表时间:2014-02-13
最后修改:2014-02-13
第一种方法
不太现实,js禁用的话,现在还有几个网站能正常运行。
第二种方法
也不太现实,现在ajax盛行的时代,所有操作都跳转用户体验也就不用说了
第三种方法
不知道是怎么实现数据库防止重复提交的,用户打开两个页面填写同样的数据,同时提交怎么区分是重复提交?难道有一条数据不让插入吗?
防止重复提交首先页面肯定是要控制的,比如按扭置灰,弹出加载框,这种只能避免一般用户的重复提交.
有些恶意用户可以用程序模拟重复提交,这种需要特别注意,只能在后端程序做控制了。
只有前后台结合才能完全避免重复提交
|
返回顶楼 |
|
|
- zhangfortune
- 等级: 初级会员
- 性别:
- 文章: 5
- 积分: 30
- 来自: 北京
|
sweat89 写道 token呢?
支持token。
|
返回顶楼 |
|
|
- flex_莫冲
- 等级: 初级会员
- 性别:
- 文章: 26
- 积分: 30
- 来自: 广州
|
ajax的话token也要更新。
|
返回顶楼 |
|
|
- foible
- 等级: 初级会员
- 性别:
- 文章: 9
- 积分: 30
- 来自: 武汉
|
1、第1种肯定要采用的,即提交后禁止按钮。 2、采用ajax提交
以上两种可以解决你提出的5种问题。
|
返回顶楼 |
|
|