js防止表单重复提交实现代码


Posted in Javascript onSeptember 05, 2012

基于令牌的处理就是一劳永逸的方法。

<script Language='JavaScript'> 
function formsubmit() { 
Today = new Date(); 
var NowHour = Today.getHours(); 
var NowMinute = Today.getMinutes(); 
var NowSecond = Today.getSeconds(); 
var mysec = (NowHour*3600)+(NowMinute*60)+NowSecond; 
if((mysec-document.formsubmitf.mypretime.value)>600){ 
//600只是一个时间值,就是5分钟内禁止重复提交,值随便设 
document.formsubmitf.mypretime.value=mysec; 
} 
else{ 
alert(' 按一次就够了,请勿重复提交!请耐心等待!谢谢合作!'); 
return false; 
} 
document.forms.formsubmitf.submit(); 
} 
</script>

防止网页后退?禁止缓存
通过控制浏览器的缓存及页面的有效期,当在重定向之后的新页面上点击浏览器后退按钮时,会提示”网页已过期”,从而防止后退时导致表单被提交。但这种方式不是对所有浏览器都是有效的,所以要考虑后再使用。在response时在header中添加如下代码来控制浏览器的缓存及网页的有效期限或直接在网页的<meta>中添加:
<?php 
//..... 
///在IE 4或5中,Cache-Control标记将被忽略,不起作用 
header('Cache-Control: no-cache'); 
header('Expires: 0'); 
//对于https有效,与“Expires: -1”相同,此时浏览器仍旧缓存页面,但把页面标记为立即过期 
header('Pragma:no-cache'); 
//.... 
?>

action有这样的一个方法生成令牌
protected String generateToken(HttpServletRequest request) { 
HttpSession session = request.getSession(); 
try { 
byte id[] = session.getId().getBytes(); 
byte now[] = 
new Long(System.currentTimeMillis()).toString().getBytes(); 
MessageDigest md = MessageDigest.getInstance("MD5"); 
md.update(id); 
md.update(now); 
return (toHex(md.digest())); 
} catch (IllegalStateException e) { 
return (null); 
} catch (NoSuchAlgorithmException e) { 
return (null); 
} 
}

asp来做实例
表单文件formtest.asp
<% 
Randomize '初始代随机数种子 

num1=rnd() '产生随机数num1 

num1=int(26*num1)+65 '修改num1的范围以使其是A-Z范围的Ascii码,以防表单名出错 

session("antry")="test"&chr(num1) '产生随机字符串 
%> 
<form name="test" action="testact.asp" method="post"> 
你的名字:<input type='text' name='' size=30>  '注意本行中使用了随机表单项名 
<input type='submit' value='提交'> 
</form>

表单处理程序testact.asp
<% 
teststr=request.form(session("antry")) 

if teststr="" then 

 response.write "没有填写姓名或重复提交" 

 '由于用户没有填写名字,或表单被重复提交(标志为session("antry")为空)引起 

else 

 response.write teststr 

 session("antry")=""
'提交成功,清空session("antry"),以防重复提交!! 

end if 
%>

在这里,你只需随机化一个必填项目的表单项名即可,不必随机化所有的表单项目
Javascript 相关文章推荐
脚本收藏iframe
Jul 21 Javascript
基于Jquery的跨域传输数据(JSONP)
Mar 10 Javascript
如何使用Javascript获取距今n天前的日期
Jul 08 Javascript
append和appendTo的区别以及appendChild用法
Dec 24 Javascript
为开发者准备的10款最好的jQuery日历插件
Feb 04 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
Aug 04 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
Jan 26 Javascript
用AngularJS的指令实现tabs切换效果
Aug 31 Javascript
Vue2.x中的Render函数详解
May 30 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
Apr 26 Javascript
vue+Element-ui前端实现分页效果
Nov 15 Javascript
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
Aug 05 Vue.js
javascript面向对象入门基础详细介绍
Sep 05 #Javascript
说说JSON和JSONP 也许你会豁然开朗
Sep 02 #Javascript
自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
Sep 02 #Javascript
Javascript中的delete介绍
Sep 02 #Javascript
JS判断当前日期是否大于某个日期的实现代码
Sep 02 #Javascript
Javascript this 的一些学习总结
Aug 31 #Javascript
javascript动画浅析
Aug 30 #Javascript
You might like
phplock(php进程锁) v1.0 beta1
2009/11/24 PHP
Laravel中使用自己编写类库的3种方法
2015/02/10 PHP
PHP中的正则表达式实例详解
2017/04/25 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
javascript中创建对象的几种方法总结
2013/11/01 Javascript
跨域传值即主页面与iframe之间互相传值
2013/12/09 Javascript
javascript定义类和类的实现实例详解
2015/12/01 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
微信小程序 网络API 上传、下载详解
2016/11/09 Javascript
JS判断输入的字符串是否是数字的方法(正则表达式)
2016/11/29 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
2016/12/15 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
微信小程序-拍照或选择图片并上传文件
2017/01/06 Javascript
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
vue 实现移动端键盘搜索事件监听
2019/11/06 Javascript
vue 使用vant插件做tabs切换和无限加载功能的实现
2020/11/04 Javascript
怎么使用pipenv管理你的python项目
2018/03/12 Python
在Pycharm中对代码进行注释和缩进的方法详解
2019/01/20 Python
Python使用paramiko操作linux的方法讲解
2019/02/25 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
pip指定python位置安装软件包的方法
2019/07/12 Python
安装docker-compose的两种最简方法
2019/07/30 Python
python中利用matplotlib读取灰度图的例子
2019/12/07 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
CSS3绘制圆角矩形的简单示例
2015/09/28 HTML / CSS
连卡佛中国官网:Lane Crawford中文站
2018/01/27 全球购物
澳大利亚便宜的家庭购物网站:CrazySales
2018/02/06 全球购物
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
沃尔玛加拿大:Walmart.ca
2020/03/02 全球购物
新西兰最大、占有率最高的综合性药房:PharmacyDirect药房中文网
2020/11/03 全球购物
酒店管理专业毕业生自我鉴定
2014/09/29 职场文书
优秀学生干部事迹材料
2014/12/24 职场文书
事业单位聘任报告
2015/03/02 职场文书
2015年政府采购工作总结
2015/05/21 职场文书
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL