十分钟内学会 避免用户刷新导致重复POST提交
Question
在Web应用中,采用POST提交信息是非常常见的,然而如果目标页面打开得太慢,用户就可能会刷新页面,这时候之前已经提交过的信息就会被重复提交。即使用户成功打开了POST提交目标页,之后他通过链接导航到别处了,再退回到POST提交目标页时仍可能会重复提交页面(例如因为浏览器缓存已失效)。而且,只要碰到重复POST提交的场景,浏览器就会问用户是否确认重做此操作,用户并不一定能正确理解重做意味着重做什么,浏览器又不允许网站向用户解释清楚,所以这属于非常不友善的设计。那么我们应该如何避免用户刷新带来的重复提交呢?
Answer
有一种最简单的模式能够解决这个问题,叫做PRG,也就是Post-Redirect-Get。在用户提交信息后,我们不要在POST提交的目标URL返回结果页面,而返回一个302将浏览器重定向到真正的结果显示页,然后浏览器通过GET去获取那个页面。
这样做的话,用户刷新结果页,或者通过历史记录回到该页面,都不会导致浏览器要重新进行POST,自然也就不会出现烦人的是否重做对话框了。而对于你来说,也有效避免了用户重复提交信息的可能性。
相关推荐
-
Asp.Net防止刷新重复提交数据的办法
在网上搜 一下,可以找到很多关于这方面的资料,其中有一篇是来自MSDN上的一种解决方法: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/BedrockASPNET.asp 它是通过重新定义 System.Web.UI.Page 类来实现加载页面时,是"刷新"."后退"请求,还是正常请求,其他的页面则继承了自定义的这 个Page类.感觉他这个方法比较独特,有例子
-
asp.net 处理F5刷新页面重复提交页面的一个思路
当提交完一个页面后,如果我们再次点击F5刷新该页面的话,会弹出一个提示,提示我们如果继续,则会重新发送提交我们刚才提交的内容,要是类似付款或一次性的操作,我们不应该这样操作,否则会造成重复提交的问题.解决这个问题,我们可以通过如下思路来处理: 1. 提交成功后,将一个成功状态存入session中,然后重新载入该页面. 2. 在page_load方法中,判定该session字段的状态值,如果为成功,则显示成功信息,否则显示错误提示,紧跟着通过Session.Remove()方法来清空该缓存即可.
-
关于页面刷新,事件重复提交的方法分享
浏览器的刷新是指重复上一次向服务器发送的请求,而asp.net的服务器控件的事件都是通过postback机制向服务器发送请求的.所以,当你点击提交按钮后再刷新,实际上是把提交按钮的postback请求又发送了一次.而asp.net应用服务器是无法区别这是正常点击按钮添加还是f5刷新添加(这涉及到页面生命周期...),那么这样就会导致在数据库里会存在n 条一模一样的数据. 在解决这个问题的过程中,尝试了一下几种方法: (1)在事件提交后,将其中的参数置空,使得程序在执行过程中,因为没有参数而不会做
-
firefox下jquery iframe刷新页面提示会导致重复之前动作
刷新页面会提示 "要显示此页面, Firefox 必须发送将会导致重复之前动作的数据(例如搜索或者下订单)"看看以下代码 复制代码 代码如下: $("iframe").load(function(){ $(this).attr("src","about:blank"); }) 框架打开后设置地址到一个空页面就可以避免这个提示但有个问题 就是设置src后会触发load事件,会导致循环加载所以需要设置一个参数 等触发完正常事件后
-
javascript下阻止表单重复提交、防刷新、防后退
1 服务器端的解决方法.这是我最为推荐的方法.优点是判断准确,兼容性最大. 做法:a页面显示表单,然后提交b页面处理,处理完后重定向到c页面显示结果. 1.0 在访问a页面时在session里生成一个标志ID,例如 //伪代码 session("submitID")=random() 然后把这个值写到表单的一个hidden的input里 //伪代码 <%response.write("<input name=submitID2 type=hidden val
-
android中ListView多次刷新重复执行getView的解决方法
以前倒是没有注意listview的getView会重复执行多次,这次因为布局比较复杂,所以在测试的时候去断点跟踪,发现同一条数据不断的重复执行.觉得很奇怪,于是上网搜索了一下.网上的解释基本一致,就是ListView布局时height和width都不是fill_parent,导致不断计算高度,不断刷新.或者说它的父容器没有设置成fill_parent. 可以布局太复杂的情况下,全部按照fill_parent去调整不现实.所以想了另一种方案,就是动态固定高度. 在程序运行后,固定ListView的
-
javaweb用户注销后点击浏览器返回刷新页面重复登录问题的解决方法
最近在写一个购书网站,测试注销功能时点击浏览器返回刷新浏览器,会发现原本已经注销的用户又重新登录了 想了很久在网上也找了很多办法,不过网上给出的办法大多是用js实现注销后禁止用户点击游览器返回 这个办法虽然可行,但并不是在后台真正的解决这个问题,有一种防君子不防小人的感觉 下面把自己实现的方法记录下来 原理: 注销后点击浏览器返回刷新浏览器其实就是浏览器将原来form表单的信息重新发送了一遍 注销也就是干掉原来的session // 注销 private void logout(HttpServ
-
php环境下利用session防止页面重复刷新的具体实现
b.php的代码 复制代码 代码如下: <?php //只能通过post方式访问 if ($_SERVER['REQUEST_METHOD'] == 'GET') {header('HTTP/1.1 404 Not Found'); die('亲,页面不存在');} session_start(); $fs1=$_POST['a']; $fs2=$_POST['b']; //防刷新时间,单位为秒 $allowTime = 30; //读取访客ip,以便于针对ip限制刷新 /*获取真实ip开始*/
-
JSP刷新页面表单重复提交问题解决办法分享
使用sessionID和时间戳作为标识,关键代码如下: 复制代码 代码如下: public class SswpdjAction extends BaseAction{ public String execute(){ /**业务代码**/ ................ //设置标识 this.setSessionToken(); //转到添加页面 return "toAdd"; } public String
-
asp.net防止刷新时重复提交(可禁用工具条刷新按钮)
前段时间遇到了需要禁用刷新的需求,f5按钮就不说了,简单的js就能把它禁用,但是工具条上的刷新按钮却傻傻干不掉. 如果简单的在刷新时重新加载画面,通过window.location.href="url"可以很容易的实现,但是需求是要求在刷新时什么都不做,保留画面的状态,这下子可就复杂化了. asp.net中分辨请求是重新请求还是通过刷新按钮再次请求不是很方便,为了实现这个效果,试过了很多的方式,一下面的两种为例 1. 复制代码 代码如下: private bool pageRefres
随机推荐
- Java基本类型与包装类详细解析
- Java多线程编程小实例模拟停车场系统
- JavaWeb 实现验证码功能(demo)
- oracle 11g配置 解决启动连接数据库出现的ora错误
- 解决微信二次分享不显示摘要和图片的问题
- PHP 木马攻击防御技巧
- Python自动发邮件脚本
- MySQL密码正确却无法本地登录的解决方法
- javascript使用数组的push方法完成快速排序
- Node+Express+MongoDB实现登录注册功能实例
- JavaScript使用Ajax上传文件的示例代码
- jQuery Masonry瀑布流插件使用方法详解
- 利用WSH里的MapNetworkDrive方法脚本蠕虫的传播方式
- JQuery 1.6发布 性能提升,同时包含大量破坏性变更
- Android自定义view实现太极效果实例代码
- 让星空极速彻底下岗的图文教程
- Python中用Descriptor实现类级属性(Property)详解
- 用NPOI创建Excel、合并单元格、设置单元格样式、边框的方法
- 解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
- activitygroup 切换动画效果如何实现