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 相关文章推荐
js限制文本框为整数和货币的函数代码
Oct 13 Javascript
javascript学习笔记(七) js函数介绍
Jun 19 Javascript
Jquery事件的连接使用示例
Jun 18 Javascript
JavaScript函数的4种调用方法详解
Apr 22 Javascript
Javascript中3种实现继承的方法和代码实例
Aug 12 Javascript
jquery获取radio值实例
Oct 16 Javascript
javascript实现标签切换代码示例
May 22 Javascript
js将当前时间格式化为 年-月-日 时:分:秒的实现代码
Jan 20 Javascript
React项目动态设置title标题的方法示例
Sep 26 Javascript
Angular2 自定义表单验证器的实现方法
Dec 14 Javascript
微信小程序云开发 搭建一个管理小程序
May 17 Javascript
微信jssdk踩坑之签名错误invalid signature
May 19 Javascript
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读取flv文件的播放时间长度
2009/09/03 PHP
php 3行代码的分页算法(求起始页和结束页)
2009/10/21 PHP
PHP CKEditor 上传图片实现代码
2009/11/06 PHP
php基于session实现数据库交互的类实例
2015/08/03 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
2016/03/21 PHP
jquery遍历input取得input的name
2009/04/27 Javascript
jQuery MD5加密实现代码
2010/03/15 Javascript
能说明你的Javascript技术很烂的五个原因分析
2011/10/28 Javascript
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
2013/03/25 Javascript
jquery 图片缩放拖动的简单实例
2014/01/08 Javascript
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
2015/09/14 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
微信小程序支付及退款流程详解
2017/11/30 Javascript
python基础教程之实现石头剪刀布游戏示例
2014/02/11 Python
Python实现生成简单的Makefile文件代码示例
2015/03/10 Python
python去除所有html标签的方法
2015/05/05 Python
Python设计模式之观察者模式简单示例
2018/01/10 Python
简单实现python画圆功能
2018/01/25 Python
详解Python进阶之切片的误区与高级用法
2018/12/24 Python
用python建立两个Y轴的XY曲线图方法
2019/07/08 Python
python numpy 常用随机数的产生方法的实现
2019/08/21 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
2020/11/18 Python
BeautifulSoup中find和find_all的使用详解
2020/12/07 Python
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
简单的项目建议书模板
2014/03/12 职场文书
上下班时间调整通知
2015/04/23 职场文书
房地产项目合作意向书
2015/05/08 职场文书
全陪导游词开场白
2015/05/29 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书
python爬取某网站原图作为壁纸
2021/06/02 Python
springboot集成springCloud中gateway时启动报错的解决
2021/07/16 Java/Android
在项目中使用redis做缓存的一些思路
2021/09/14 Redis
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL