限制同一表单多次提交的分析,网站搭建
导读:网站搭建网站搭建同一表单多次提交有时候会产生某些预料不到的结果,比如重复订阅邮件或重复 投票等。 本文介绍在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
If Request("FID") = "" Then
GenerateForm
Else
ProcessForm
End If
GenerateForm负责生成表 单,表单中应该含有一个隐藏的FID,如:
Sub GenerateForm()
End Sub
ProcessForm负责处理通过表单提交的内容,但在处理之前应该先调用 CheckFID()检查当前表单是否已经提交,代码类如:
Sub ProcessForm()
If CheckFID() Then
Response.Write "你输入的内容 是"Request.QueryString("param1")
RegisterFID
Else
Response.Write "此表单只能提交一次!"
End If
End Sub
三、同一表单多次提交的限制与改进措施
上面我们介绍了在当前 会话期间限制同一表单多次提交的一种方法。在实际应用中可能需要从多方面加 以改进,例如:
⑴ 在登记表单ID之前检查用户输入数据的合法性,使 得数据不合法时用户可以按“后退”按钮返回,在修正后再次提交同一表单。
⑵ 这种同一表单多次提交的限制最多只能在当前手机模板dede会话期间有效。如果 要求这种限制能够跨越多个会话,那么就要用到Cookeis或数据库来保存相关数 据了。
⑶ 这种方法是不安全的。它仅用于防范误操作,不能防止熟练 用户有意地同一表单多次提交;
还有一种只需使用几行代码的方法,轻松地 实现了防止用户同一表单多次提交和使用后退钮重复多次提交表单。
表单文件formtest.asp
Randomize '初始代随机数种子
num1=rnd() '产 生随机数num1
num1=int(26*num1)+65 '修改num1的范围以使其是A-Z范 围的Ascii码,以防表单名出错
session("antry")="test"&chr(num1) '产生随机字符串
你的名字: '注意本行中使用了随机表单项名
表单处理程序 testact.asp
teststr=request.form(session("antry"))
if teststr="" then
response.write "没有填写姓名或重复提交"
'由于用 户没有填写名字,或表单被重复提交(标志为session("antry")为空)引起
else
response.write teststr
session("antry")="" '提交成功 ,清空session("antry"织梦模板网;),以防同一表单多次提交!
end if
在这里 ,你只需随机化一个必填项目的表单项名即可,不必随机化所有的表单项目。达 到了限制同一表单多次提交的问题相关技术支持网站建站技术模板。
声明: 本文由我的SEOUC技术文章主页发布于:2023-08-08 ,文章限制同一表单多次提交的分析,网站搭建主要讲述表单,网站搭建网站建设源码以及服务器配置搭建相关技术文章。转载请保留链接: https://www.seouc.com/article/web_38115.html
- 上一篇:网站优化重在实践应用,网站搭建
- 下一篇:建立网站可为企业带来什么,seo建站技术