FORM表单重复提交问题解决方法

来源:互联网 发布:linux查看用户和组 编辑:程序博客网 时间:2024/05/22 15:18
    在web开发中如果用到Form表单提交数据到后台,会遇到一个问题,我之前遇到过,就是在提交完之后若不跳到另一个页面,表单的提交信息会保存在缓存中,一单再次点击sumit,或者F5刷新页面,又或者后退前进,都会触发表单信息在再次提交,这就是所说的重复提交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,这时页面的访问顺序就是不正确的,这样同步标记将处在一个不同步的状态,或者它根本就不存在。不论怎样,访问都被禁止了。

     以上是我遇到这个问题然后上网查资料之后总结的几点,个人觉得2,3比较实用


0 0
原创粉丝点击