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 相关文章推荐
ie6下png图片背景不透明的解决办法使用js实现
Jan 11 Javascript
node.js中的fs.truncate方法使用说明
Dec 15 Javascript
jquery实现表格本地排序的方法
Mar 11 Javascript
JS获取时间的相关函数及时间戳与时间日期之间的转换
Feb 04 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
Jun 13 Javascript
Javascript之面向对象--接口
Dec 02 Javascript
使用typescript开发angular模块并发布npm包
Apr 19 Javascript
jQuery 操作 HTML 元素和属性的方法
Nov 12 jQuery
vue路由结构可设一层方便动态添加路由操作
Aug 31 Javascript
解决vue项目运行提示Warnings while compiling.警告的问题
Sep 18 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
Oct 22 Javascript
vue使用element-ui实现表单验证
Dec 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注销代码(session注销)
2012/05/31 PHP
Memcached常用命令以及使用说明详解
2013/06/27 PHP
Smarty3配置及入门语法
2017/02/22 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
2019/09/12 PHP
PHP Web表单生成器案例分析
2020/06/02 PHP
一个不错的应用,用于提交获取文章内容,不推荐用
2007/03/03 Javascript
DB.ASP 用Javascript写ASP很灵活很好用很easy
2011/07/31 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
2013/12/11 Javascript
JavaScript中的ArrayBuffer详细介绍
2014/12/08 Javascript
jquery判断复选框是否选中进行答题提示特效
2015/12/10 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
2016/10/31 Javascript
微信小程序  http请求封装详解及实例代码
2017/02/15 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
浅谈ECMAScript6新特性之let、const
2017/08/02 Javascript
vue 中filter的多种用法
2018/04/26 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
[46:53]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
Python中的lstrip()方法使用简介
2015/05/19 Python
Python封装成可带参数的EXE安装包实例
2019/08/24 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
2020/01/16 Python
tensorflow对图像进行拼接的例子
2020/02/05 Python
编写python代码实现简单抽奖器
2020/10/20 Python
HTML5的自定义属性data-*详细介绍和JS操作实例
2014/04/10 HTML / CSS
受外贸欢迎的美国主机:BlueHost
2017/05/16 全球购物
日本即尚网:JSHOPPERS.com(支持中文)
2019/12/03 全球购物
求职信需要的五点内容
2014/02/01 职场文书
《诺贝尔》教学反思
2014/02/17 职场文书
常务副总经理任命书
2014/06/05 职场文书
付款证明格式范文
2015/06/19 职场文书
2016年12月份红领巾广播稿
2015/12/21 职场文书
Python基础之函数嵌套知识总结
2021/05/23 Python
Java新手教程之ArrayList的基本使用
2021/06/20 Java/Android
你知道Java Spring的两种事务吗
2022/03/16 Java/Android
python神经网络学习 使用Keras进行回归运算
2022/05/04 Python