ASP网页编程之在ASP使用法式中限制反复提交统一表单
使用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提供的是一对多的服务,所以用户的一些特殊需求很难得到满足。 ASP主要是用好六个对象,其实最主要的是用好其中两个:response和request,就可以随心所欲地控制网页变换和响应用户动作了。 以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。 Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点) 以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。 如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助: 不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍 我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路。 完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。 Session:这个存储跟客户端会话过程的数据,默认20分钟失效 如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。 如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助: 先学习用frontpage熟悉html编辑然后学习asp和vbscript建议买书进行系统学习 Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名") 还有如何才能在最短的时间内学完?我每天可以有效学习2小时,双休日4小时。 下面简单介绍一下我学习ASP的方法,希望对想学习ASP的朋友有所帮助... ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。 因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。 不能只是将它停留在纸上谈兵的程度上。 运用经典的例子。并且自己可以用他来实现一些简单的系统。如果可以对他进行进一步的修改,找出你觉得可以提高性能的地方,加上自己的设计,那就更上一个层次了,也就会真正地感到有所收获。
页:
[1]