asp表单防止请不要重复提交表单或者说防刷新的问题

ASP 中如何防止重复提交数据_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
4页免费4页免费45页4下载券2页免费9页免费 2页1下载券3页免费3页2下载券2页免费2页免费
喜欢此文档的还喜欢8页2下载券1页免费38页1下载券5页1下载券17页2下载券
ASP 中如何防止重复提交数据|
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢在asp网页内禁止重复提交表单的代码怎么写_百度知道
在asp网页内禁止重复提交表单的代码怎么写
我做了个asp网站游客可以在a.asp页中发布信息,并提交到b.asp页执行,当然通过b.asp页执行就是把数据库写入数据库提交完成后浏览器停留在b.asp上的,这时这个游客可以通过两种方式大量重复地恶意提交信息:一种是反复刷新a.asp,一种是后退到a.asp再提交。我想请高手帮忙,搞好再加50分,诚心。另外本人不是计算机专业的,做这个网站也是下源码来改的,也就是菜鸟。所以请直接告诉我代码是什么?要把它放在哪个位置。谢谢。
字打错了, 不好意思,应该这样:我做了个asp网站 游客可以在a.asp页中发布信息,并提交到b.asp页执行,当然通过b.asp页执行就是把表单信息写入数据库 提交完成后浏览器停留在b.asp上的,这时这个游客可以通过两种方式大量重复地恶意提交信息:一种是反复刷新b.asp,一种是后退到a.asp再提交。 我想请高手帮忙,做一个禁止这两种恶意行为横行霸道的代码出来。谢谢。搞好再加50分,诚心。 另外本人不是计算机专业的,做这个网站也是下源码来改的,也就是菜鸟。所以请直接告诉我代码是什么?要把它放在哪个位置。谢谢。
提问者采纳
很简单 a页面在form里 放一个target=&_blank& 这样就等于是打开b为新窗口 b页面在数据入库后加上一句这样的代码 response.write &&script&window.close();&/script&& 关闭这个新窗口页面 这样就禁止了b的重复刷新问题 第二个问题 a页面重复提交的问题 点submit的时候 onclick=&location.href='a.asp'& 这样两个问题都解决了 但是却不是很好的一个方案 我建议你可以多学习学习asp 在表单提交的时候做一个验证 还有一个方法是验证标题祝你好运实在搞不好的话 找我QQ
其他类似问题
按默认排序
其他2条回答
加个session变量记录状态或者设置一个限制时间,限制提交间隔的时间。二楼的说的就是session变量,但后面的几乎不用管,只许用前几行,也就是用&% session(&Antry&)=ture %& 然后加个判断语句&%if session(&Antry&)=ture thenResponse.Write &请勿重复提交表单!& else%&添加数据到数据库代码
提交用验证码防止二次提交和刷新
asp网页的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁ASP防止表单重复提交的办法
ASP防止表单重复提交的办法:
&&&&&&&& 用户提交表单时经常会遇到一些意外情况,比如多次刷新页面、按了后退键等,如果不采取控制措施就会引起表单重复提交的问题。
本文介绍的这种防止方法,主要由四个子程序组成,在较为简单的应用场合,你只要将这些代码放在包含文件中直接引用即可;对于那些较为复杂的环境,我们在文章的最后给出一些改进建议。
&一、基本工作过程
&下面我们依次讨论这四个子程序。&
&(一)初始化
&这里我们要在Session对象中保存两个变量,其中:
&⑴&每一个表单对应一个称为FID的唯一标识,为使该值唯一要用到一个计数器。
&⑵&每当一个表单成功提交,必须在一个Dictionary对象中存储它的FID。
&我们用一个专用的过程来初始化上述数据。虽然以后各个子程序都要调用它,但实际上每一个会话期间它只执行一次:
Sub&InitializeFID()
If&Not&IsObject(Session(&FIDList&))&Then
Set&Session(&FIDList&)=Server.CreateObject(&Scripting.Dictionary&)
Session(&FID&)=0
&(二)生成表单的唯一标识符
&下面这个函数GenerateFID()用于生成表单的唯一标志。该函数首先将FID值加1,然后返回它:
Function&GenerateFID()
InitializeFID
Session(&FID&)&=&Session(&FID&)&+&1
GenerateFID&=&Session(&FID&)
End&Function
&(三)登记已提交表单
&当表单成功地提交时,在Dictionary对象中登记它的唯一标识:
Sub&RegisterFID()
Dim&strFID
InitializeFID
strFID&=&Request(&FID&)
Session(&FIDlist&).Add&strFID,&now()
&(四)检查表单是否重复提交
&在正式处理用户提交的表单之前,应该在Dictionary对象中检查它的FID是否已经登记。下面的CheckFID()函数用来完成这个工作,如已经登记,它返回FALSE,否则返回TRUE:
Function&CheckFID()
Dim&strFID
InitializeFID
strFID&=&Request(&FID&)
CheckFID&=&not&Session(&FIDlist&).Exists(strFID)
End&Function
&二、如何使用
&有两个地方要用到上述函数,即表单生成时与结果处理时。假设上述四个子程序已经放入包含文件Forms.inc中,下面的代码根据FID值来决定生成表单还是处理表单结果,它所描述的处理过程适合于大多数ASP应用:
&!--#include&file=&forms.inc&--&
&TITLE&表单提交测试&/TITLE&
If&Request(&FID&)&=&&&&Then
GenerateForm
ProcessForm
&GenerateForm负责生成表单,表单中应该含有一个隐藏的FID,如:
Sub&GenerateForm()
&form&action=&&%=Request.ServerVariables(&PATH_INFO&)%&&&method=GET&
&input&type=hidden&name=FID&value=&&%=GenerateFID()%&&&
&input&type=text&name=&param1&&value=&&&
&input&type=submit&value=&OK&&
&ProcessForm负责处理通过表单提交的内容,但在处理之前应该先调用CheckFID()检查当前表单是否已经提交,代码类如:
Sub&ProcessForm()
If&CheckFID()&Then
Response.Write&&你输入的内容是&&&&Request.QueryString(&param1&)
RegisterFID
Response.Write&&此表单只能提交一次!&
&三、限制与改进措施
&上面的asp教程我们介绍了在当前会话期间限制同一表单被多次提交的一种方法。在实际应用中可能需要从多方面加以改进,例如:
&⑴&在登记表单ID之前检查用户输入数据的合法性,使得数据不合法时用户可以按&后退&按钮返回,在修正后再次提交同一表单。
&⑵&这种对表单提交的限制最多只能在当前会话期间有效。如果要求这种限制能够跨越多个会话,那么就要用到Cookeis或数据库来保存相关数据了。
&⑶&这种方法是不安全的。它仅用于防范误操作,不能防止熟练用户有意地多次提交同一表单。
阅读本文后您有什么感想? 已有
人给出评价!
13-03-2612-12-0711-11-1811-07-0911-07-0811-07-0611-05-2311-05-17
注:您的评论需要经过审核才会显示出来
没有查询到任何记录。
Copyright &
PC6下载().All Rights Reserved
备案编号:湘ICP备号您所在的位置: &
Struts2 国际化与防止刷新重复提交表单
Struts2 国际化与防止刷新重复提交表单
本实例主要是功能是实现Struts2 国际化,防止刷新得利提交表单,利用struts2的验证机制验证字符输入的合法性,邮箱输入的正确性。
本实例用两个页面(create.jsp,createResult.jsp),一个Action(CreateAction),一个验证文件(CreateAction-validation.xml),两个Struts2 国际化文件(message_en_US.properties,message_zh_CN.properties),还有一个struts.xml(必有的).创建用户成功之后,显示刚才创建的信息,不成功则显示错误提示,错误提示使用了Struts2 国际化来显示,输入合法性就用了用struts2的验证机制验证.
如下结构图,好好对照:
K:\ECLIPSWORKS\STRUTS2TEST│& .classpath│& .mymetadata│& .project│├─.myeclipse├─src│& │& message_en_US.properties│& │& message_zh_CN.properties│& │& struts.xml│& ││& └─cn│&&&&& └─struts2│&&&&&&&&&&&&& CreateAction-validation.xml│&&&&&&&&&&&&& CreateAction.java│└─WebRoot│& create.jsp│& createResult.jsp│├─META-INF│&&&&& MANIFEST.MF│└─WEB-INF│& web.xml│├─classes│& │& message_en_US.properties│& │& message_zh_CN.properties│& │& struts.xml│& ││& └─cn│&&&&& └─struts2│&&&&&&&&&&&&& CreateAction-validation.xml│&&&&&&&&&&&&& CreateAction.class│└─libcommons-logging-1.0.4.jarfreemarker-2.3.8.jarjcommon-1.0.14.jarjunit.jarognl-2.6.11.jarstruts2-core-2.0.11.2.jarstruts2-jfreechart-plugin-2.0.11.2.jarxwork-2.0.5.jar
1.CreateAction.java // ******************************************************************package cn.struts2;
import java.util.D
import com.opensymphony.xwork2.ActionS
public class CreateAction extends ActionSupport{private Sprivate Sprivate Sprivate Dprivate Date registedDprivate S/*** @return the name*/public String getName(){}/*** @param name the name to set*/public void setName(String name){this.name =}/*** @return the password*/public String getPassword(){}/*** @param password the password to set*/public void setPassword(String password){this.password =}/*** @return the repassword*/public String getRepassword(){}/*** @param repassword the repassword to set*/public void setRepassword(String repassword){this.repassword =}/*** @return the birthday*/public Date getBirthday(){}/*** @param birthday the birthday to set*/public void setBirthday(Date birthday){this.birthday =}/*** @return the registedDay*/public Date getRegistedDay(){return registedD}/*** @param registedDay the registedDay to set*/public void setRegistedDay(Date registedDay){this.registedDay = registedD}/*** @return the age*/public int getAge(){}/*** @param age the age to set*/public void setAge(int age){this.age =}public String getEmail(){}public void setEmail(String email){this.email =}//****************************************public String execute()throws Exception{return SUCCESS;}}
2.置全局Struts2 国际化文件(两个):
// message_en_US.properties ********************************************create = Create Users Informationusername.invalid = User Name Not Null!password.invalid.null = Password Not Null!password.invalid.too.short.or.long = Password should be between 6 and 10submit = submit//***********************************************************************中文国际化// message_zh_CN.properties ********************************************create = \u521b\u5efa\u\u4fe1\u606fusername.invalid = \u\u540d\u4e0d\u80fd\u4e3a\u7a7apassword.invalid.null = \u5bc6\ud\u80fd\u4e3a\u7a7apassword.invalid.too.short.or.long = \u5bc6\uf\u5ea6\u5fc5\u987b\u5\u4e4b\u95f4submit =\u63d0\u4ea4
//***********************************************************************
注意:如(create = \u521b\u5efa\u\u4fe1\u606f)等号右边的一串乱码是中文字符对就的ASCII码值,如果你需要转换,可以打开你的CMD(开始--&运行--&输入CMD即可),输入命令native2ascii,回车,将你的中文字符粘上,再回车就可以看到一串乱码了.再将其COPY到相应的位置即可.
文件的名字不能乱取,XXX_en_US.properties,XXX_zh_CN.properties,XXX后面的名字是固定的,而前面的XXX是根据你的struts.xml文件中的
& CONSTANT name="struts.custom.i18n.resources" value="XXX"&中的XXX而取的.本例的XXX就是message.
3.struts.xml //& ************************************************************************& ?xml version="1.0" encoding="UTF-8"?&http://struts.apache.org/dtds/struts-2.0.dtd"&
& STRUTS&& CONSTANT name="struts.custom.i18n.resources" value="message"&& /CONSTANT&& PACKAGE name="struts2" extends="struts-default"&
& ACTION class=cn.struts2.CreateAction name="create"&/createResult.jsp& /RESULT&& RESULT name="input"&/create.jsp& /RESULT&& INTERCEPTOR-REF name="token"&& /INTERCEPTOR-REF&& INTERCEPTOR-REF name="defaultStack"&& /INTERCEPTOR-REF&/create.jsp&&&&&&&&&&&&
& /PACKAGE&
//************************************************************************
4.web.xml& // ****************************************************************<WEB-APP version="2.4" xmlns="" xmlns:xsi="" xsi:schemaLocation=" "&& FILTER&& FILTER-NAME&struts2& /FILTER-NAME&& FILTER-CLASS&org.apache.struts2.dispatcher.FilterDispatcher& /FILTER-CLASS&& /FILTER&& FILTER-MAPPING&& FILTER-NAME&struts2& URL-PATTERN&/*& /URL-PATTERN&& /FILTER-MAPPING&& /WEB-APP&
//*************************************************************************
(1)// createResult.jsp ************************************************************************
<%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>& BASE href=""&& META content=no-cache http-equiv=pragma&& META content=no-cache http-equiv=cache-control&& META content=0 http-equiv=expires&&&& & META content=keyword1,keyword2,keyword3 http-equiv=keywords&& META content="This is luanmad's JSP page" http-equiv=description&& !--& LINK rel=stylesheet type=text/css href="styles.css"&--&
User Name:${requestScope.name }Password :${requestScope.password }Age:& ?xml:namespace prefix = s /&& s:property value="age"&Birthday:& s:property value="birthday"&& /s:property&RegistedDay:& s:property value="registedDay"&& /s:property&Email:& s:property value="email"&& /s:property&
//***********************************************************************
(2)& // create.jsp *******************************************************************
& %@ page language="java" import="java.util.*" pageEncoding="gbk"%&<%String path = request.getContextPath();String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";%><BASE href="">
& META content=no-cache http-equiv=pragma&& META content=no-cache http-equiv=cache-control&& META content=0 http-equiv=expires&& META content=keyword1,keyword2,keyword3 http-equiv=keywords&& META content="This is luanmad's JSP page " http-equiv=description&& !----&
& s:form method="post" action="create"&& !-- 防止刷新重复提交--&& s:token&& /s:token&
& s:textfield name="name" label="User Name"&& /s:textfield&& s:password name="password" label="Password"&& /s:password&& s:textfield name="age" label="Age"&& /s:textfield&& s:textfield name="birthday" label="Birthday"&& /s:textfield&& s:textfield name="registedDay" label="RegistedDay"&& s:textfield name="email" label="Email"&& s:submit key="submit"&& /s:submit&& s:reset label="reset"&& /s:reset&
//*******************************************************************
6.验证文件(注意名字要与你的Action名字一样,后面再跟固定的(-validation.xml)如(CreateAction-validation.xml)
CreateAction-validation.xml:// ****************************************************************************& ?xml version="1.0" encoding="UTF-8"?&/xwork/xwork-validator-1.0.2.dtd"&
& !-- 格式的写法可以参照XWork Validator 1.0.2.dtd --&& !-- 参数设置参照xwork-2.0.5.jar 下的com.opensymphony.xwork2.validator.validators/default.xml --&& VALIDATORS&& !--验证谁, 用谁来验证 --&& FIELD name="name"&& FIELD-VALIDATOR type="requiredstring"&& !--requiredstring对应的类的方法里的参数名trim 如public void setTrim(boolean trim)里的trim --&& PARAM name="trim"&true& /PARAM&& !-- message key的key内容是I18N里(即baseName_zh_CN.properties和baseName_en_US.properties中)定义的字段名即等号在边的名字如(username.invalid = 名字不能为空)--&& /MESSAGE&& /FIELD-VALIDATOR&& /FIELD&& FIELD name="password"&& FIELD-VALIDATOR type="requiredstring"&& PARAM name="trim"&true& /PARAM&& MESSAGE key="password.invalid.null"&& /MESSAGE&& /FIELD-VALIDATOR&& /FIELD&& FIELD name="password"&& FIELD-VALIDATOR type="stringlength"&& PARAM name="minLength"&6& /PARAM&& PARAM name="maxLength"&16& /PARAM&& MESSAGE key="password.invalid.too.short.or.long"&& /MESSAGE&& /FIELD-VALIDATOR&& /FIELD&& !-- 以下未做国际化 --&& FIELD name="age"&& FIELD-VALIDATOR type="int"&1& /PARAM&& PARAM name="max"&150& /PARAM&& MESSAGE&age should be between ${min} and ${max}& /FIELD-VALIDATOR&& /FIELD&& FIELD name="birthday"&& FIELD-VALIDATOR type="required"&& MESSAGE&birthday not null!& /MESSAGE&& /FIELD-VALIDATOR&& FIELD-VALIDATOR type="date"&& PARAM name="min"&& /PARAM&& PARAM name="max"&& /PARAM&& MESSAGE&birthday should be between ${min} and ${max}& /FIELD-VALIDATOR&& FIELD name="email"&& FIELD-VALIDATOR type="email"&& MESSAGE&email format error!& /FIELD-VALIDATOR&& /FIELD&
【编辑推荐】
【责任编辑: TEL:(010)】
关于&&的更多文章
这周的头版头条是“双十一”。凌晨12点守在电脑前抢东西的各位,
本次的专刊为大家提供了Oracle最新推出的Java SE 8详细的开发教程,从解读到探究Java 8最新
现在这天气到处都是高温,还是老老实实的呆在家里上网
、27日,在美国圣何塞举行的Hadoop Summit
首先给大家说说小编一直在玩的游戏--植物大战僵尸。前
本书是一本从头至尾都使用现实世界例子讲述有关编写Web应用程序的书籍。WebWork所强调的内容是:利用框架实现你的项目,而不是被
51CTO旗下网站asp.net 禁止用户通过浏览器回退重复提交表单 - 好代码编程网
asp.net 禁止用户通过浏览器回退重复提交表单
在需要禁止回退的加入如下代码。
&script language="javascript"&&&&&&&&& &&& &!--& &&&&&&& javascript:.history.ward(1);& &&& //--&&&&&&&&& &/script&
.Net 文章一周点击
.Net 文章一月点击
HaoGongJu.Net ( 好代码 ) All Rights Reserved

我要回帖

更多关于 请不要重复提交表单 的文章

 

随机推荐