|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
使用filesystemobject,可以对服务器上的文件进行操作,浏览、复制、移动、删除等。有ado的支持,asp对数据库的操作非常得心应手。你甚至可以像使用本地数据库那样,管理远程主机上的数据库,对表格、记录进行各种操作。法式|反复|反复提交|反复提交 在Internet上咱们天天城市碰到数不清的表单,也看到个中大局部并没无限制用户屡次提交统一个表单。缺少这类限制有时分会发生某些意料不到的了局,如反复定阅邮件办事或反复投票等。也许一些asp初学者其实不清晰在asp使用中若何限制反复提交统一表单,所以在这里向人人引见在ASP使用中避免用户在以后会话时代屡次提交统一表单的一个复杂办法。
这个任务次要由四个子法式构成,在较为复杂的使用场所,你只需将这些代码放在包括文件中直接援用便可;关于那些较为庞杂的情况,咱们在文章的最初给出一些改善建议。
1、根基任务进程
上面咱们顺次会商这四个子法式。
(一)初始化
这里咱们要在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
2、若何利用
有两个中央要用到上述函数,即表单生成时与了局处置时。假定上述四个子法式已放入包括文件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
%>
3、限制与改善办法
下面咱们引见了在以后会话时代限制统一表单被屡次提交的一种办法。在实践使用中能够需求从多方面加以改善,例如:
⑴ 在挂号表单ID之前反省用户输出数据的正当性,使得数据不正当时用户可以按“前进”按钮前往,在修改后再次提交统一表单。
⑵ 这类对表单提交的限制最多只能在以后会话时代无效。假如请求这类限制可以逾越多个会话,那末就要用到Cookeis或数据库来保留相干数据了。
</p> 由于ASP提供的是一对多的服务,所以用户的一些特殊需求很难得到满足。 |
|