js防止表单重复提交实现代码

 更新时间:2012年09月05日 20:19:38   作者:  
重复提交、重复刷新、防止后退等等都是属于系统为避免重复记录而需要解决的问题,在客户端去处理需要针对每一种的可能提出相应的解决方案,然而在服务器端看来只不过是对于数据真实性的检验问题
基于令牌的处理就是一劳永逸的方法。
复制代码 代码如下:

<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
%>

在这里,你只需随机化一个必填项目的表单项名即可,不必随机化所有的表单项目

相关文章

  • js实现数字滚动特效

    js实现数字滚动特效

    这篇文章主要为大家详细介绍了js实现数字滚动特效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • js脚本中执行java后台代码方法解析

    js脚本中执行java后台代码方法解析

    这篇文章主要介绍了js脚本中执行java后台代码方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • JavaScript 装逼指南(js另类写法)

    JavaScript 装逼指南(js另类写法)

    如何写JavaScript才能逼格更高呢?怎样才能、让别人一眼看出你不简单呢?是否很期待别人在看完你的代码之后感叹一句原来还可以这样写呢?下面列出一些在JavaScript时的装逼技巧,也可说是非常实用的写法
    2020-05-05
  • javascript中Number对象的toString()方法分析

    javascript中Number对象的toString()方法分析

    这篇文章主要介绍了javascript中Number对象的toString()方法,较为详细的分析了toString()方法的用法及注意事项,非常具有实用价值,需要的朋友可以参考下
    2014-12-12
  • JS实现屏蔽shift,Ctrl,alt等功能键的方法

    JS实现屏蔽shift,Ctrl,alt等功能键的方法

    这篇文章主要介绍了JS实现屏蔽shift,Ctrl,alt等功能键的方法,涉及javascript针对键盘按键的获取与操作技巧,需要的朋友可以参考下
    2015-06-06
  • laydate日历控件使用方法详解

    laydate日历控件使用方法详解

    这篇文章主要为大家详细介绍了laydate日历控件的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • ECMAScript6--解构

    ECMAScript6--解构

    解构就是将声明的一组变量和与相同结构的数组或者对象的元素数值一一对应,并将变量相对应元素进行赋值。本文将详细介绍ECMAScript6--解构的相关知识。下面跟着小编一起来看下吧
    2017-03-03
  • 动态添加删除表格行的js实现代码

    动态添加删除表格行的js实现代码

    本篇文章主要是对动态添加删除表格行的js实现代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-02-02
  • BootStrap的alert提示框的关闭后再显示怎么解决

    BootStrap的alert提示框的关闭后再显示怎么解决

    这篇文章主要介绍了BootStrap的alert提示框的关闭后再显示问题的相关资料,需要的朋友可以参考下
    2016-05-05
  • JS实现仿百度输入框自动匹配功能的示例代码

    JS实现仿百度输入框自动匹配功能的示例代码

    本篇文章主要是对JS实现仿百度输入框自动匹配功能的示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-02-02

最新评论