您正在使用 IPV4 [3.231.217.209] 访问本站,您本次已经查看了 1 页
用户名: 密 码: 验证码:     用QQ登录本站
首页 软件 编程 笑话 知识 公告 台风 日历 计算器
悟空收录网       [公益]保护绿色环境,构建和谐社会      

【腾讯云】 爆款2核2G3M云服务器首年 61元,叠加红包再享折上折      
[公益] 地球是我家,绿化靠大家      
2024年 清明节 006
2024年 劳动节 033
2025年 元 旦 278
2025年 春 节 306
 
您现在的位置:首页 >> ASP/ASP.net >> 内容
本类新增
本类热门
在ASP中限制同一表单被多次提交
内容摘要: 一、基本工作过程下面我们依次讨论这四个子程序。(一)初始化这里我们要在Session对象中保存两个变量,其中:⑴ 每一个表单对应一个称为FID的唯一标识,为使该值唯一要用到一个计数器。⑵ 每当一个表单成功提交,必须在一个Dictionary对象中存储它的FID。我们用一个专用的过程来初始化上述数据。虽然以后各个子程序都要调用它,但实际上每一个会话期间它只执行......
一、基本工作过程


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


(一)初始化


这里我们要在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实现强制图片下载函数

 

下一篇:显示五个重复的句子,字体越来越大

发布日期:2021/6/15
手机扫二维码直达本页
发布时间:12:34:56
点  击:7
录  入:齐天大圣
相关文章
Baidu
YiJiaCMS 7.3.8 build231228(MSSQL) 闽ICP备05000814号-1
本空间由腾讯云(轻量应用服务器)提供,Cloudflare提供加速防护
运行时间载入中.....