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 相关文章推荐
validator验证控件使用代码
Nov 23 Javascript
jQuery版仿Path菜单效果
Dec 15 Javascript
ScrollDown的基本操作示例
Jun 09 Javascript
js实例属性和原型属性示例详解
Nov 23 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
Mar 13 Javascript
jQuery插件Validate实现自定义校验结果样式
Jan 18 Javascript
JavaScript中获取纯正的undefined的方法
Mar 06 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
Jul 01 Javascript
JS+CSS实现下拉刷新/上拉加载插件
Mar 31 Javascript
Vue 幸运大转盘实现思路详解
May 06 Javascript
el-select数据过多懒加载的解决(loadmore)
May 29 Javascript
JQuery实现折叠式菜单的详细代码
Jun 03 jQuery
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 Ajax实现页面无刷新发表评论
2007/01/02 PHP
PHP 防恶意刷新实现代码
2010/05/16 PHP
php中{}大括号是什么意思
2013/12/01 PHP
laravel-admin表单提交隐藏一些数据,回调时获取数据的方法
2019/10/08 PHP
JavaScript起点(严格模式深度了解)
2013/01/28 Javascript
IE6-8中Date不支持toISOString的修复方法
2014/05/04 Javascript
jQuery插件jPaginate实现无刷新分页
2015/05/04 Javascript
JavaScript操作XML文件之XML读取方法
2015/06/09 Javascript
javascript实现相同事件名称,不同命名空间的调用方法
2015/06/26 Javascript
js实现图片点击左右轮播
2015/07/08 Javascript
三种AngularJS中获取数据源的方式
2016/02/02 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
JS表格组件神器bootstrap table详解(强化版)
2016/05/26 Javascript
javascript中Date对象应用之简易日历实现
2016/07/12 Javascript
浅谈angular懒加载的一些坑
2016/08/20 Javascript
jQuery实现的模拟弹出窗口功能示例
2016/11/24 Javascript
浅谈react.js 之 批量添加与删除功能
2017/04/17 Javascript
Angular 4.X开发实践中的踩坑小结
2017/07/04 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
Vue.js实现的计算器功能完整示例
2018/07/11 Javascript
vue中typescript装饰器的使用方法超实用教程
2019/06/17 Javascript
Python中列表和元组的相关语句和方法讲解
2015/08/20 Python
Python字典操作详细介绍及字典内建方法分享
2018/01/04 Python
python 对字典按照value进行排序的方法
2019/05/09 Python
在python中实现调用可执行文件.exe的3种方法
2019/07/07 Python
以下为Windows NT 下的32 位C++程序,请计算sizeof 的值
2016/12/07 面试题
《哪吒闹海》教学反思
2014/02/28 职场文书
车间安全生产标语
2014/06/06 职场文书
2015年教师节慰问信
2015/03/23 职场文书
与死神共舞观后感
2015/06/15 职场文书
总经理聘用协议书
2015/09/21 职场文书
python 实现图与图之间的间距调整subplots_adjust
2021/05/21 Python
Python数据类型最全知识总结
2021/05/31 Python
MySQL库表名大小写的选择
2021/06/05 MySQL
Python 避免字典和元组的多重嵌套问题
2022/07/15 Python