防止表单重复提交的几种方案

简介:
< DOCTYPE html PUBLIC -WCDTD XHTML TransitionalEN httpwwwworgTRxhtmlDTDxhtml-transitionaldtd>

          重复提交、重复刷新都是来解决系统重复记录的问题。在我们做程序开发的时候经常会遇到用户点了提交以后,由于各种原因用户会在去点提交或是按浏览器的刷新按扭,从而导致数据重复提交。

         我们来了解一下"防止后退"操作的原因是什么?比如你在开发某个投票系统,它有很多的步骤,并且这些步骤之间是有联系的,比如第一步会将某些信息发送给第二步,第二步缓存了这些信息,同时将自身的信息发送给了第三步。。。。。等等,如果此时用户处在第三步骤下,我们想象一下某个淘气用户的用户点击了后退按钮,此时屏幕出现了第二步骤的页面,他再次的修改或者再次的提交,进入到下一个步骤(也就是第三步骤),错误就会在此产生?!什么错误呢?最为典型的就是这样的操作直接导致了对于第一个步骤信息的丢失!
        当然很多的系统(比如订票系统从需求上本身是允许个人重复订票的)是必须要避免重复刷新、重复提交、以及防止后退的问题的,但即使是这样的问题,也要区分如何处理以及在哪里处理的(网上只是告诉你如何处理,但很少去区分在哪里处理的),显然处理的方式无非是客户端或者服务器端两种,而面对不同的位置处理的方式也是不同的,但有一点要事先声明:任何客户端(尤其是B/S端)的处理都是不可信任的,最好的也是最应该的是服务器端的处理方法。
      以下列举了几种防止重复提交的几种解决方案.

第一种方法:
          在提交以后用页面跳转的方法来重新处理打开当前页,如:Response.Redirect("本页")。也可以达到我们要的目的。

第二种方法:
         就是采用session或者一个验证票的方式去解决.
session方式可以参照:http://www.microsoft.com/china/msdn/library/webservices/asp.net/BedrockAspNet.mspx?mfr=true
其它的在struts中有一个token方式也类似


其它方案:
       写js设置一个变量,只允许提交一次.但是客户端总是信不过的,最好还是用前面两种方案去解决后退.

本文转自 netcorner 博客园博客,原文链接:http://www.cnblogs.com/netcorner/archive/2008/06/27/2912131.html  ,如需转载请自行联系原作者

相关文章
|
3月前
|
JavaScript 前端开发 数据安全/隐私保护
提交表单与验证表单案例
提交表单与验证表单案例
16 0
|
5月前
|
JSON JavaScript 前端开发
form表单提交方式
form表单提交方式
|
8月前
|
缓存 NoSQL JavaScript
8 种方案解决重复提交问题,还怕没有适合你的?
8 种方案解决重复提交问题,还怕没有适合你的?
|
设计模式 JavaScript 数据库
表单防止重复提交的四种方式
表单防止重复提交的四种方式
185 0
|
存储 前端开发 安全
最简单的6种防止数据重复提交的方法!(干货)上
最简单的6种防止数据重复提交的方法!(干货)
781 0
最简单的6种防止数据重复提交的方法!(干货)上
|
存储 SQL 算法
最简单的6种防止数据重复提交的方法!(干货)下
最简单的6种防止数据重复提交的方法!(干货)
305 1
|
缓存 NoSQL JavaScript
8 种方案解决重复提交问题!你选择哪一种呀?
1.什么是幂等 2.产生原因 3.解决方案 ①配置注解 ②实例化锁 ③AOP 切面 ④注解使用案例
|
NoSQL Redis 数据库
重复提交,你是如何处理的?
幂等性就是说无论你执行几次请求,其结果是一样的。说到了幂等就不得不说重复提交了,你连续点击提交按钮,理论上来说这是同一条数据,数据库应该只能存入一条,而实际上存放了多条,这就违反了幂等性。因此我们就需要做一些处理,来保证连续点击提交按钮后,数据库只能存入一条数据。
639 0