当前位置:首页 > 开发 > Web前端 > 前端 > 正文

表单重复提交Double Submits

发表于: 2015-06-11   作者:rensanning   来源:转载   浏览:
摘要: 可能发生的场景: *多次点击提交按钮 *刷新页面 *点击浏览器回退按钮 *直接访问收藏夹中的地址 *重复发送HTTP请求(Ajax) (1)点击按钮后disable该按钮一会儿,这样能避免急躁的用户频繁点击按钮。 这种方法确实有些粗暴,友好一点的可以把按钮的文字变一下做个提示,比如Bootstrap的做法: http://getbootstrap.co
可能发生的场景:
  • *多次点击提交按钮
  • *刷新页面
  • *点击浏览器回退按钮
  • *直接访问收藏夹中的地址
  • *重复发送HTTP请求(Ajax)

(1)点击按钮后disable该按钮一会儿,这样能避免急躁的用户频繁点击按钮。
这种方法确实有些粗暴,友好一点的可以把按钮的文字变一下做个提示,比如Bootstrap的做法: http://getbootstrap.com/javascript/#buttons

(2)不disable按钮,通过全局变量来控制多次点击(只有页面重新加载后可以再次点击)。
var isProcessing = false;
function doSignup() {
  if(isProcessing) {
    alert('The request is being submitted, please wait a moment...');
    return;
  }
  isProcessing = true;

  // do something......
}

需要注意的是如果是AJAX请求的话一定要在请求回来后重置这个值:
  $.ajax({
    url : "",
    complete :function() {
      isProcessing = false;
    },
    success :function(data) {
      //...
    }
  });


(3)Post-Redirect-Get (PRG)
提交后发送一个redirect 请求,这样能避免用户按F5刷新页面,或浏览器的回退按钮
参考: http://en.wikipedia.org/wiki/Post/Redirect/Get

(4)Synchronizer Token Pattern
为每次请求生成一个唯一的Token,把它放入session和form的hidden。
处理前先校验token是否一致,不一致屏蔽请求,一致时立即清除后继续处理。
比如:
  • Struts 1.x在Action类中可以通过saveToken(request)和isTokenValid(request)方法来实现。
  • Struts 2.x提供了org.apache.struts2.interceptor.TokenInterceptor来实现Token校验。
这种方法也适用于跨站请求伪造Cross-Site Request Forgery (CSRF)。

参考:
http://www.zhihu.com/question/19805411
http://technoesis.net/prevent-double-form-submission/
http://stackoverflow.com/questions/2324931/duplicate-form-submission-in-spring
http://docs.spring.io/spring-security/site/docs/current/reference/html/csrf.html

表单重复提交Double Submits

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
防止表单重复提交 介绍了使用 redirect 技术防止表单提交,但是 redirect 解决不了后退到表单页面时
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能
via: http://blog.sina.com.cn/s/blog_7ffb8dd50101411g.html 一、造成重复提交主要的两个原因: 在
struts2的限制表单重复提交,除了可以限制提交外,还可以让程序员手动指定表单重复提交后,页面转到哪去
概述 有些时候,我们在想某个网页提交了信息之后,由于某些原因,我们会重复点击提交,或者刷新页面
一、重复提交的处理方式 1.在进行请求之后重定向到查询或者其他不操作数据库的请求 2.将页面事件执
 在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可
/* * Generated by MyEclipse Struts * Template path: templates/java/JavaClass.vtl */ package c
1、在网络延迟会或服务器反应过慢的情况下让用户有时间点击多次submit按钮导致表单重复提交 2、用户
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号