在ASP应用中如何限制同一表单被多次提交!!!!好东西

台北绿茶

台北绿茶

2016-01-29 17:56

在ASP应用中如何限制同一表单被多次提交!!!!好东西,在ASP应用中如何限制同一表单被多次提交!!!!好东西
       在Internet上我们每天都会遇到数不清的表单,也看到其中大部分并没有限制用户多次提交同一个表单。缺乏这种限制有时候会产生某些预料不到的结果,如重复订阅邮件服务或重复投票等。

   本文介绍在ASP应用中防止用户在当前会话期间多次提交同一表单的一个简单方法。它主要由四个子程序组成,在较为简单的应用场合,你只要将这些代码放在包含文件中直接引用即可;对于那些较为复杂的环境,我们在文章的最后给出一些改进建议。

   一、基本工作过程

   下面我们依次讨论这四个子程序。

   (一)初始化

   这里我们要在Session对象中保存两个变量,其中:

   ⑴ 每一个表单对应一个称为FID的唯一标识,为使该值唯一要用到一个计数器。

   ⑵ 每当一个表单成功提交,必须在一个Dictionary对象中存储它的FID。

   我们用一个专用的过程来初始化上述数据。虽然以后各个子程序都要调用它,但实际上每一个会话期间它只执行一次:

Sub InitializeFID()
If Not IsObject(Session("FIDList")) Then
Set Session("FIDList")=Server.CreateObject("Scripting.Dictionary")
Session("FID")=0
End If
End Sub


   (二)生成表单的唯一标识符

   下面这个函数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()
End Sub


   (四)检查表单是否重复提交

   在正式处理用户提交的表单之前,应该在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应用:

< %Option Explicit%
< !--#include file="forms.inc"--
< HTML
< HEAD
< TITLE表单提交测试< /TITLE
< /HEAD
< BODY
< %
If Request("FID") = "" Then
GenerateForm
Else
ProcessForm
End If
%
< /BODY
< /HTML


   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"
< /form
< %
End Sub
%


   ProcessForm负责处理通过表单提交的内容,但在处理之前应该先调用CheckFID()检查当前表单是否已经提交,代码类如:
< %
Sub ProcessForm()
If CheckFID() Then
Response.Write "你输入的内容是" & Request.QueryString("param1")
RegisterFID
Else
Response.Write "此表单只能提交一次!"
End If
End Sub
%


   三、限制与改进措施

展开更多 50%)
分享

猜你喜欢

在ASP应用中如何限制同一表单被多次提交!!!!好东西

ASP
在ASP应用中如何限制同一表单被多次提交!!!!好东西

在ASP应用中如何限制同一表单被多次提交

ASP
在ASP应用中如何限制同一表单被多次提交

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

在ASP应用程序中限制重复提交同一表单

ASP
在ASP应用程序中限制重复提交同一表单

asp中如何限制重复提交同一表单

ASP
asp中如何限制重复提交同一表单

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

2.8 在ASP中限制同以表单被多次提交

Web开发
2.8 在ASP中限制同以表单被多次提交

ASP小偷程序如何利用XMLHTTP实现表单的提交

Web开发
ASP小偷程序如何利用XMLHTTP实现表单的提交

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Linux指令篇:文件管理--tee

Linux指令篇:文件管理--tee

Windows和它的父亲.四

Windows和它的父亲.四
下拉加载更多内容 ↓