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 相关文章推荐
Prototype 工具函数 学习
Jul 23 Javascript
jquery 选择器部分整理
Oct 28 Javascript
window.name代替cookie的实现代码
Nov 28 Javascript
如何让页面加载完成后执行js
Jun 26 Javascript
jQuery实现DIV层收缩展开的方法
Feb 27 Javascript
jQuery背景插件backstretch使用指南
Apr 21 Javascript
探讨AngularJs中ui.route的简单应用
Nov 16 Javascript
原生js更改css样式的两种方式
Mar 15 Javascript
基于twbsPagination.js分页插件使用心得(分享)
Oct 21 Javascript
Vue2.0结合webuploader实现文件分片上传功能
Mar 09 Javascript
微信小程序时间选择插件使用详解
Dec 28 Javascript
解决vue更新路由router-view复用组件内容不刷新的问题
Nov 04 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的一个完整SMTP类(解决邮件服务器需要验证时的问题)
2006/10/09 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
2016/10/28 PHP
php无限级评论嵌套实现代码
2018/04/18 PHP
Tinymce+jQuery.Validation使用产生的BUG
2010/03/29 Javascript
JS中处理与当前时间间隔的函数代码
2012/05/23 Javascript
jQuery.fn和jQuery.prototype区别介绍
2013/10/05 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
jQuery Ajax传值到Servlet出现乱码问题的解决方法
2016/10/09 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
2017/02/10 Javascript
node使用Mongoose类库实现简单的增删改查
2018/11/08 Javascript
Vue实现微信支付功能遇到的坑
2019/06/05 Javascript
微信小程序webview 脚手架使用详解
2019/07/22 Javascript
mpvue网易云短信接口实现小程序短信登录的示例代码
2020/04/03 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
[04:02]2014DOTA2国际邀请赛 BBC每日综述中国战队将再度登顶
2014/07/21 DOTA
Python列表生成器的循环技巧分享
2015/03/06 Python
关于Python正则表达式 findall函数问题详解
2018/03/22 Python
Python实现随机创建电话号码的方法示例
2018/12/07 Python
python try 异常处理(史上最全)
2019/03/07 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
2019/04/15 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
python文件编写好后如何实践
2020/07/07 Python
基于Python3读写INI配置文件过程解析
2020/07/23 Python
Python list和str互转的实现示例
2020/11/16 Python
在python3.9下如何安装scrapy的方法
2021/02/03 Python
HTML5 canvas基本绘图之填充样式实现
2016/06/27 HTML / CSS
旧时光糖果:Old Time Candy
2018/02/05 全球购物
mysql的最长数据库名,表名,字段名可以是多长
2014/04/21 面试题
安全教育实施方案
2014/03/02 职场文书
组工干部对照检查材料
2014/08/25 职场文书
小学教师岗位职责
2015/04/02 职场文书
负责培养人意见
2015/06/05 职场文书
高三教师工作总结2015
2015/07/21 职场文书
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python