打印

[原创]如何阻止表单重复提交、防刷新、防后退

如何阻止表单重复提交、防刷新、防后退

这个问题有几种解决方案如下。

1 服务器端的解决方法。这是我最为推荐的方法。优点是判断准确,兼容性最大。

做法:a页面显示表单,然后提交b页面处理,处理完后重定向到c页面显示结果。

1.0 在访问a页面时在session里生成一个标志ID,例如
复制内容到剪贴板
代码:
//伪代码
session("submitID")=random()
然后把这个值写到表单的一个hidden的input里
复制内容到剪贴板
代码:
//伪代码
<%response.write("<input name=submitID2 type=hidden value=\""+session("submitID")+"\">")%>
1.1 b页面处理时判断表单所提交的submitID2的值是否和session中的submitID一致,不一致的话重定向到报错页面,一致的话把session中的submitID清空然后进行表单处理
复制内容到剪贴板
代码:
//伪代码
session("submitID")=""
//然后处理提交......
处理完成后重定向到c页面

1.2 c页面其实就没什么好说的了,就是一个显示处理结果的页面。



2 客户端用js解决
这种方法不好,因为必然会遇到不同浏览器的兼容性问题,而且是必然可以绕过的。唯一的优点就是简单,不需要太多的编码

2.0防止后退
在每个页面的最顶上加上这个代码
复制内容到剪贴板
代码:
<script>window.history.forward();</script>
2.1防止刷新
我很难想到什么好方法可以做到。因为要屏蔽的地方太多了。只好采用一种很烂的方法:
复制内容到剪贴板
代码:
<body onunload="location='about:blank'>" <!-- 这个方法只是个想法,没有经过调试 -->
本帖最近评分记录
支持楼主.收藏
http://www.qlili.com 个人站帮点啊
试了,不怎么行啊。
论坛网址收录,网址集锦www.luntan520.com
不错,怎么没人顶?

防止刷新是不是也可以用session做标记?

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
支持.学习~

TOP

最简单的 是
onClick="this.disabled='true';submit()"
如果禁用JS则无效果
老实人说老实话,做老实事,稳稳当当

TOP

曾经做个一个类似的功能。不知道严谨性和兼容性如何。
login form提交到一个blank窗口,blank窗口不显示IE的menu菜单,将form的target指向这个blank窗口。在新的窗口内,发生key相关事件的时候,判断一些敏感key,比如esc,F5等,屏蔽这些key的事件。
ForgotteN

TOP

我是这么做的:

function doSubmit(button,form)
{
   button.disabled = true;
   try
   {
      form.submit();
   }
   catch(e)
   {
   }
   button.disabled = false;
}

TOP

支持楼主.收藏
我的经典收藏:  Http://Www.Mk126.Cn

TOP

study

TOP

不错!我用过防止后退javascript:window.history.forward(1);   
还可以
<A  HREF="PageName.htm"  onclick="javascript:location.replace(this.href);   

event.returnValue=false;  ">

TOP