`
evget
  • 浏览: 141348 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
文章分类
社区版块
存档分类

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 "你输入的内容是"

未完,原文地址:http://www.evget.com/zh-CN/Info/ReadInfo.aspx?id=9166
分享到:
评论

相关推荐

    Asp.net防止页面被多次提交

    ### ASP.NET 防止页面被多次提交 在 Web 开发中,特别是在 ASP.NET 这样的框架下,防止页面被多次提交是一个常见的需求。当用户点击提交按钮后,可能会因为网络延迟、误操作等原因而重复点击提交按钮,导致数据被多...

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

    或许一些 asp初学者并不清楚在asp应用中如何限制重复提交同一表单,所以在这里向大家介绍在ASP应用中防止 用户在当前会话期间多次提交同一表单的一个简单方法。 这个工作主要由四个子程序组成,在较为简单的应用...

    ASP专题文档集.zip(压缩密码:eshu98)

    在ASP应用中限制同一表单被多次提交 在Web网页上使用VBScript和JScript 编写Web方式上载文件的ASP组件 利用ASP开发网络聊天室 “用ASP建造聊天室”的一点补充 用ASP 实 现 分 页 显 示 用ASP方式实现拥有动态伸缩...

    Asp.net刷新重复提交

    这可能导致数据的不一致性和错误,因为服务器可能会收到相同请求的多次处理,而这些请求原本应该只被处理一次。为了解决这个问题,开发者通常会采取一些策略来确保数据的正确性和一致性。 标题"ASP.NET刷新重复提交...

    asp.net 防止用户通过后退按钮重复提交表单

    但同样需要在服务器端处理并发请求,以防止同一数据的多次提交。 综上所述,防止用户通过后退按钮重复提交表单涉及到多方面的技术和策略,包括控制HTTP缓存、使用JavaScript、服务器端验证、PRG模式以及利用AJAX。...

    基于PHP的复杂表单设计.pdf

    使用数组命名可以将多个命名为同一数组名隐藏域元素一次性提交多项数据。 3. PHP 语言在复杂表单设计中的应用:PHP 语言可以用于设计复杂表单,例如录入多个学生的多门课程成绩。通过使用 PHP 语言,可以设计出功能...

    Asp.net 防止提交相关(bing)

    在ASP.NET开发中,防止重提交(也称为双重提交或重复提交)是一个重要的问题,它涉及到用户可能在页面刷新或网络延迟时意外地多次提交相同的数据。这可能导致数据不一致性和逻辑错误。本文将深入探讨如何在ASP.NET...

    第13章 ASP.NET Web应用程序开发

    需要注意的是,对Application对象的操作需要加锁以防止多个用户同时修改同一数据,从而导致数据不一致的问题。 **Session对象**则用于存储特定于用户的会话信息。这意味着每个用户都有自己独立的Session数据。例如...

    asp.net 防止用户重登陆

    在ASP.NET开发中,防止用户重登陆是一个重要的安全特性,它确保了用户的登录状态不会在多个设备或浏览器会话间冲突,增强了系统的安全性。本文将深入探讨如何在ASP.NET环境中实现这一功能,主要包括session管理、...

    重复提交和回发或回调参数无效问题

    表单重复提交是指用户提交表单后,由于某些原因(如浏览器缓存、网络延迟等),导致同一操作被执行多次。这种问题可能会导致数据库数据冗余,影响业务逻辑的正确性。 ##### 3.2 防止策略 为了有效防止表单重复提交...

    ASP实例开发源码-asp宁志投票评选网站管理系统.zip

    8. **状态管理**:可能用到session或cookie来跟踪用户状态,防止同一用户多次投票。 9. **文件操作**:"使用须知.txt"可能是系统使用说明或开发者注释,对于理解系统工作原理和部署步骤非常有帮助。 10. **日期...

    基于ASP的注册及登录验证模块设计

    3. **会话管理**:如果验证成功,服务器创建一个会话(Session),用于跟踪用户状态,防止同一用户多次登录。这通常通过设置Session变量实现。 4. **重定向或反馈**:登录成功后,用户会被重定向到主页或其他受保护...

    ASP实例自学手册资料

    + 同一网站登录多个邮箱 * 动态表单应用 + 上传文件 + 提交动态表单的数据 + 由数据库记录创建表单 * 网页控制 + 禁止网页刷新 + 在网页上屏蔽鼠标右键 + 防止网页的盗链 + 限制网页访问 + 鼠标双击自动...

    ASP.net在线投票系统

    使用ASP.NET,开发者可以快速构建动态网站,支持各种交互功能,如表单提交、验证、会话管理等。在这个在线投票系统中,ASP.NET扮演了服务器端处理逻辑的角色,负责接收客户端的请求,执行投票逻辑,然后返回相应的...

    最新asp登陆界面设计

    7. **会话管理**:成功登录后,ASP可以使用Session对象来跟踪用户的会话状态,防止同一用户多次登录,或者未登录用户访问受保护的页面。 8. **验证码**:为了增加安全性,可以引入验证码功能,防止自动化的机器人...

    防止刷新后退重复提交

    对于API接口,设计为幂等性,即多次执行同一操作结果相同,不会产生额外影响。例如,支付接口,无论调用多少次,实际只扣款一次。 9. **用户交互提示**: 提供明确的用户反馈,如显示“提交成功”消息,并在成功...

    asp简单投票,投票程序。

    7. **防止重复投票**:为了防止同一用户多次投票,程序可能需要实施某种验证机制,如检查Cookie、Session或IP地址,以限制每台电脑或每个用户只能投一次票。 8. **错误处理**:ASP提供On Error语句进行错误处理,...

    asp异步刷新最好的例子

    GET请求是幂等的,意味着多次执行同一请求不会改变服务端的状态。 2. **POST方法**:POST请求用于向服务器发送大量数据,如用户输入表单的信息。在ASP中,POST请求可以在异步刷新时用于提交复杂或大容量的数据,而...

    asp职称考试模拟系统的设计与实现(源代码+设计说明书).zip

    在线考试系统需要防止作弊行为,例如限制同一IP地址多次答题、防止答案被非法篡改等。ASP中可以通过验证用户输入、设置session超时、使用HTTPS等手段提升系统的安全性。 7. **系统性能优化** 对于大规模的在线...

Global site tag (gtag.js) - Google Analytics