|
c中,下面的代码根据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或数据库来保存相关数据了。
⑶ 这种方法是不安全的。它仅用于防范误操作,不能防止熟练用户有意地多次提交同一表单。 上一页 [1] [2]
|