转自:http://blog.csdn.net/gideal_wang/article/details/4189694
在开发中,如果一个新增或修改的表单,在后台完成数据库操作后我们设定的不是跳转到其他页面,还是返回本页面,这时点击浏览器的后退再提交或刷新页面,会导致form表单重复提交,即这条记录会被增加或修改两次。
导致表单重复提交的原因是:第一次提交的表单会被缓存到内存中,直到页面下次提交或页面关闭或转向其他页面时才消失。在自调用返回时,内存中的数据依然在,这时页面中的判断提交的代码依然可以检测到提交的值,顾会产生重复提交的效果。
总结网上的解决办法和自己的测试,可以用以下几个办法解决:
(1)最简单:页面提交后转到另一个页面而不是本页面
(2)提交表单后提交按钮变灰/隐藏提交按钮
(3)在js里设置全局变量,提交后修改该变量的值,依据变量的值判断是否重复提交
var flag=false;
function checkForm(){
if (flag==true){
return false;
}
flag=true;
document.form1.submit();
}
(4)在登录用户的Session中,放置一个随机数作为同步标记,并在初始化新增或编辑页面时就返回到前台页面中,用隐藏域赋值,当form被提交时,form中的同步标记就和Session中的同步标记作对比。在form首次提交的时候,这两个标记应该是一样的。如果标记不一样,那么该form就会禁止提交,一个错误就会返回给用户。在用户提交一个form时,如果按下浏览器中的后退按钮并尝试重新提交同一个form时,标记就会出现不匹配的现象。
另一方面,如果两个标记值匹配,那么我们就可以确信整个流程是正确的。在这种情况下,Session中的标记值就会被修改为一个新的值,同时允许提交该form。
还可以使用这个策略来控制对某些页面的直接访问,就好象上面资源保护中描述的一样。例如,假设一个用户将某个应用的页面A收藏到收藏夹中,而页面A 只允许通过页面B和C访问。当用户直接通过收藏夹来访问页面A,这时页面的访问顺序就是不正确的,这样同步标记将处在一个不同步的状态,或者它根本就不存在。不论怎样,访问都被禁止了。
相关推荐
今天小编就为大家分享一篇防止Layui form表单重复提交的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
好友使用vue技术封装了一个专门用于提交表单和下载文件的“防抖按钮”,其实现原理和使用方法看这里 https://blog.csdn.net/PursueExcellence/article/details/103903139。
防止用户表单重复提交的完整demo 分别在js与后台中处理,js处理(针对网络慢情况) 后台处理(针对用户点击浏览器上的刷新按钮等)
先说对话框(Dialog)里的表单提交 错误方案 说起错误方案,比如,点击提交按钮,本地验证,验证通过立即让按钮不可点,这些没问题,而我的错误点概括是:在某个最后执行的回调函数的最后一行,我做了2个操作:1,...
先看一下有哪些情况下回导致表单重复提交呢,知道哪些情况下可能会出现表单重复提交就可以从根源处理表单重复提交的情况了。 下面的情况就会导致表单重复提交: 点击提交按钮两次。 点击刷新按钮。 使用浏览器...
提交表单后提交禁用提交按钮,防止重复提交.
表单重复提交是在多用户Web应用中最常见、带来很多麻烦的一个问题。有很多的应用场景都会遇到重复提交问题,比如: 点击提交按钮两次。 点击刷新按钮。 使用浏览器后退按钮重复之前的操作,导致重复提交表单。 使用...
ASP.NET中防止刷新页面造成表单重复提交
Struts2文件上传下载和表单重复提交问题
struts2防止表单重复提交--重定向
在开发中,如果一个新增或修改的表单,在后台完成数据库操作后我们设定的不是跳转到其他页面,还是返回本页面,这时点击浏览器的后退再提交或刷新页面,会导致form表单重复提交,即这条记录会被增加或修改两次。...
主要介绍了jquery提交form表单时禁止重复提交的方法,需要的朋友可以参考下
防止用户在提交表单后,刷新后出现再次提交的结果
EXT的form表单ajax提交(默认提交方式) 代码如下: 1. function login(item) { 2. 3. if (validatorForm()) { 4. // 登录时将登录按钮设为disabled,防止重复提交 5. this.disabled = true; 6. 7...
第一种:用flag标识,下面的代码设置... //当表单被提交过一次后checkSubmitFlg将变为true,根据判断将无法进行提交。 } checkSubmitFlg ==true; return true; } < /script > < form name=”form1” method=”pos
主要介绍了js禁止表单重复提交的方法,避免重复记录带来的问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例讲述了PHP使用token防止表单重复提交的方法。分享给大家供大家参考,具体如下: <?php /* * PHP使用token防止表单重复提交 * 此处理方法纯粹是为了给初学者参考 */ session_start(); function set_token...