页面刷新重复提交

转自:http://www.lai18.com/content/9827430.html

一个很老的话题了,在提交了一个form的数据后,怎样才能防止用户直接刷新提示界面来重复提交数据呢,大至上有两个很简单的方式达到目的。

方法一、form提交处理完后用Response.Redirect跳转一下页面,使得用户无法直接刷新到form提交后的页面,这种方式麻烦就是,你想保持提交前的页面状态的话,要作需要数据接替操作,作起来相当麻烦,我用这个方法时一向都是强制丢起所有页面状态,无奈,人懒没药医。

方法二、将form的所有数据加起来然后Md5一下,存在session里,下次收到数据在处理前也将所有相同的数据加起来Md5一下,对比session里的数据,如果一样就表示是重复提交,拒绝操作。防止用户手动把两次form值都填一下而无法提交,可以加一个当前时间的hidden来判定一下,是手动提交还是刷新提交就完美了。

以前一直在用方法一,导致页面状态,要不很麻烦的处理要不懒得处理导致很简单的界面用户操作起来相当繁琐。要不就是让用户随便刷新重提。最新一直在作着银行支付接口一直在搞密匙,作到这种界面时,突然想到,银行支付接口靠md5保证数据的完整性及安全性,为啥不能用md5来验证一下提交过来的form数据是否与上一次的相同呢?还能节省session占的内存数,然后方法二就诞生了。并发个blog记录一下,防止什么时候脑子一短路又把这方法给忘了,又回到页面状态保持困难的地狱里去。

时间: 2024-11-07 16:22:59

页面刷新重复提交的相关文章

转载: .net 防止页面刷新重复提交

题记: 在处理页面事件时,我们会经常会碰到这样的情况:当我们在提交一项页面表单时,在提交成功后,当我们试图按F5刷新页面时,数据会再次的被重复提交.那么 asp.net应用应用服务器是无法区别这是正常点击按钮添加还是f5刷新添加,那么这样就会导致在数据库里会存在n 条一莫一样的数据.为什么在原Asp开发程序中不会碰到这样的问题呢?我觉得是因为Asp程序主要都是将表单提交给另外一个页面处理,并且,这个页面处理 之后,将跳转到另外一个提示页面.那么在Asp程序中,只需要在回退时将页面设置为过期那么就

用HTTP状态码实现提交表单后刷新页面不重复提交

正常情况下,表单提交后如果用户刷新页面会重复提交表单,有些情况下我们不希望表单重复提交,利用HTTP协议中的307状态码重定向页面可以实现这个目的.实例如下: 表单页面代码: <form action="1.php" method="post"> <input type="text" name="na"> <input type="submit" value="提交&

避免页面按钮重复提交

1 function preventAjax(obj,num){ 2 obj.disabled = true; 3 var num = num; 4 var types =obj.type; 5 if(types == 'submit'){ 6 var text = obj.value; 7 var time1 = setInterval(function(){ 8 obj.value = num; 9 num--; 10 if(obj.value <= 0 ){ 11 clearInterva

asp.net 防止页面刷新或后退引起重复提交

 项目中经常遇到刷新后重复的向数据库增加一条相同的记录,造成数据重复,如何规避这些问题呢?下面我们就一起讨论一下在asp.net怎样防止页面刷新或后退引起重复提交数据的问题: 其实asp.net防止刷新是asp.net开发中经常遇到的问题.通常有多种方法来实现:(下面只是个人总结的一些方法)不全,也很希望朋友们能多多补充.谢谢. 1:请求转发(即在数据提交操作后立即转跳到其他页面,防止页面刷新引起回发操作) 2:不保存缓存 Response.Cache.SetNoStore(); (即提交后表单

.net防止重复提交

/**防止刷新页面导致重复提交页面 **/ 该部分放入到公共类中  方便单个页面的使用        private readonly string REFRESH_TICKET_NAME = "__RefreshTicketArray";        private readonly string HIDDEN_FIELD_NAME = "__RefreshHiddenField";        private readonly string HIDDEN_P

表单防重复提交

防止表单重复提交 介绍了使用 redirect 技术防止表单提交,但是 redirect 解决不了后退到表单页面时重复提交表单,为了解决这个问题,加入了 token 的机制.如果每个 form 相关的处理方法中都写一遍 token 的生成和校验代码,在实际项目中是不太能接受的,接下来介绍了使用拦截器的方式生成和校验 token. 1. 常规防止表单重复提交流程: GET 访问表单页面 填写表单 POST 提交表单 Server 端处理表单数据,例如把数据写入数据库 重定向到另一个页面,防止用户刷

求教——使用node做表单,刷新浏览器页面,浏览器为什么会重复提交上次所填的信息

最近在学些node,按照<nodejs实战>上的代码做练习,发现有表单重复提交的问题 第一次打开页面,显示如图是get请求 图1 现在我们提交aaa,显示如图,post请求 图2 刷新页面,应该显示图1的,结果确实下面这张图,post请求.即使是按ctrl+f5刷新没用,浏览器还是重复提交了上次的内容,显示如图 图3 不断的刷就这样了,求教这个是为什么? 图4 node代码如下 var http=require("http"); var qs = require("

ASP.NET Web Form和MVC中防止F5刷新引起的重复提交问题

转载  http://www.cnblogs.com/hiteddy/archive/2012/03/29/Prevent_Resubmit_When_Refresh_Reload_In_ASP_NET_Web_Form_MVC.html 什么是刷新/重新载入 IE中的刷新(Refresh),在FF和Chrome中称为重新载入(Reload),与正常进入页面的区别在于以下两点: 1. 缓存控制 如果文件(比如图片)在本地缓存中已经存在,正常进入页面会不访问服务器而直接从本地加载.而对于刷新操作,

防止刷新/后退引起的重复提交问题的Java Token代码,非Struts

贴子转自http://hi.baidu.com/bobylou,转之前并没有验证文章里的方法是不是有效,估计原作者把它放到blog之前应该做过测试了吧. Struts本身有一套完善的防止重复提交表单的Token(令牌)机制,但笔者目前的项目自写的framework没有用到Struts,故也得自写防止用户因为后退或者刷新来重复提交表单内容的Token机制.不难,容易实现. 实现原理:一致性.jsp生成表单时,在表单中插入一个隐藏<input>字段,该字段就是保存在页面端的token字符串,同时把