论坛首页 编程语言技术论坛

如何防止表单重复提交

浏览 10063 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2014-02-10  

 

一、有很多的应用场景都会遇到重复提交问题,比如

 

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

   发表时间:2014-02-10  
token呢?
0 请登录后投票
   发表时间:2014-02-10  
  token 这样的令牌机制确实蛮好的,只不过spring mvc 的实现方式稍微复杂一点,需要自己开发,而struts1 和struts2 都有完整的封装,使用起来非常简单。不过原理都是一样的
0 请登录后投票
   发表时间:2014-02-10  
一般这2种方式结合使用:
1、禁掉提交按钮
2、Post/Redirect/Get 模式


ps:禁用js,那他在这个网站什么都干不了,因此不用担心这个
0 请登录后投票
   发表时间:2014-02-10  
token
0 请登录后投票
   发表时间:2014-02-11  
还有一种方法。提交时出现一个loading模态提示。
还有ajax提交+全局状态变量(控制ajax提交是通过还是拒绝)
0 请登录后投票
   发表时间:2014-02-13   最后修改:2014-02-13
第一种方法
不太现实,js禁用的话,现在还有几个网站能正常运行。

第二种方法
也不太现实,现在ajax盛行的时代,所有操作都跳转用户体验也就不用说了

第三种方法
不知道是怎么实现数据库防止重复提交的,用户打开两个页面填写同样的数据,同时提交怎么区分是重复提交?难道有一条数据不让插入吗?



防止重复提交首先页面肯定是要控制的,比如按扭置灰,弹出加载框,这种只能避免一般用户的重复提交.
有些恶意用户可以用程序模拟重复提交,这种需要特别注意,只能在后端程序做控制了。
只有前后台结合才能完全避免重复提交
0 请登录后投票
   发表时间:2014-02-13  
sweat89 写道
token呢?

支持token。
0 请登录后投票
   发表时间:2014-02-14  
ajax的话token也要更新。
0 请登录后投票
   发表时间:2014-02-14  
1、第1种肯定要采用的,即提交后禁止按钮。
2、采用ajax提交

以上两种可以解决你提出的5种问题。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics