• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    在ASP应用程序中限制重复提交同一表单
    在Internet上我们每天都会遇到数不清的表单,也看到其中大部分并没有限制用户多次提交同一个表
    单。缺乏这种限制有时候会产生某些预料不到的结果,如重复订阅邮件服务或重复投票等。或许一些
    asp初学者并不清楚在asp应用中如何限制重复提交同一表单,所以在这里向大家介绍在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
    %> 

    三、限制与改进措施 

      上面我们介绍了在当前会话期间限制同一表单被多次提交的一种方法。在实际应用中可能需要从
    多方面加以改进,例如:  

       ⑴ 在登记表单ID之前检查用户输入数据的合法性,使得数据不合法时用户可以按“后退”按钮
    返回,在修正后再次提交同一表单。

       ⑵ 这种对表单提交的限制最多只能在当前会话期间有效。如果要求这种限制能够跨越多个会话
    ,那么就要用到Cookeis或数据库来保存相关数据了。
    您可能感兴趣的文章:
    • asp.net 防止用户通过后退按钮重复提交表单
    • asp.net表单提交时防重复提交并执行前台的JS验证
    上一篇:转换中文为unicode 转换unicode到正常文本
    下一篇:在ASP编程中使用数组
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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