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 相关文章推荐
基于jquery的滚动条滚动固定div(附演示下载)
Oct 29 Javascript
使用Jquery实现点击文字后变成文本框且可修改
Sep 21 Javascript
jquery easyui使用心得
Jul 07 Javascript
用户代理字符串userAgent可实现的四个识别
Sep 20 Javascript
理解javascript中try...catch...finally
Dec 25 Javascript
jQuery中的Deferred和promise 的区别
Apr 03 Javascript
vue开发心得和技巧分享
Oct 27 Javascript
JavaScript cookie详解及简单实例应用
Dec 31 Javascript
详解vue项目首页加载速度优化
Oct 18 Javascript
layui中的switch开关实现方法
Sep 03 Javascript
Layui实现主窗口和Iframe层参数传递
Nov 14 Javascript
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
Jan 13 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
PHP学习之正则表达式
2011/04/17 PHP
PHP实现的简易版图片相似度比较
2015/01/07 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
2015/12/29 PHP
php实现背景图上添加圆形logo图标的方法
2016/11/17 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
2017/02/17 PHP
PHP PDOStatement::getColumnMeta讲解
2019/02/01 PHP
随窗体滑动的小插件sticky源码
2013/06/21 Javascript
Nodejs为什么选择javascript为载体语言
2015/01/13 NodeJs
JavaScript将Web页面内容导出到Word及Excel的方法
2015/02/13 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
两种方法解决javascript url post 特殊字符转义 + &amp; #
2016/04/13 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
基于JavaScript实现滑动门效果
2017/03/16 Javascript
BootStrap下的弹出框加载select2框架失败的解决方法
2017/08/31 Javascript
bootstrap table sum总数量统计实现方法
2017/10/29 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
记录一次完整的react hooks实践
2019/03/11 Javascript
原生JS实现留言板功能
2020/02/08 Javascript
[01:02]DOTA2辉夜杯决赛日 CDEC.Y对阵VG赛前花絮
2015/12/27 DOTA
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
python批量处理多DNS多域名的nslookup解析实现
2020/06/28 Python
django models里数据表插入数据id自增操作
2020/07/15 Python
Python tkinter之ComboBox(下拉框)的使用简介
2021/02/05 Python
利用HTML5+css3+jquery+weui实现仿微信聊天界面功能
2018/01/08 HTML / CSS
html5 canvas 简单画板实现代码
2012/01/05 HTML / CSS
旧时光糖果:Old Time Candy
2018/02/05 全球购物
捷克时尚网上商店:OTTO
2018/03/15 全球购物
定制别致的瑜伽垫:Sugarmat
2019/06/21 全球购物
总经理任命书
2014/03/29 职场文书
班干部竞选演讲稿
2014/04/24 职场文书
高老头读书笔记
2015/06/30 职场文书
2019年最新版见习人员管理制度!
2019/07/08 职场文书
Django debug为True时,css加载失败的解决方案
2021/04/24 Python
Go 通过结构struct实现接口interface的问题
2021/10/05 Golang
python如何读取和存储dict()与.json格式文件
2022/06/25 Python