asp如何限制重复订阅邮件或重复投票?
时间:2010-06-09 18:48:00
如何限制重复订阅邮件或投票?
一、准备子程序和函数。
1、初始化数据,在Session对象中保存两个变量:
Sub InitializeFID()
' 每一个表单对应一个称为FID的唯一标识,为使该值唯一要用到一个计数器
If Not IsObject(Session("FIDList")) Then
Set Session("FIDList")=Server.CreateObject("Scripting.Dictionary")
' 每当一个表单成功提交,必须在一个Dictionary对象中存储它的FID
Session("FID")=0
End If
End Sub
以后各个子程序都要调用它,但实际上每一个会话期间它只执行一次
2、生成表单的唯一标识符的函数GenerateFID() :
Function GenerateFID()
InitializeFID
Session("FID") = Session("FID") + 1
' 该函数首先将FID值加1,然后返回它
GenerateFID = Session("FID")
End Function
3、当表单成功地提交时,在Dictionary对象中登记它的唯一标识:
Sub RegisterFID()
Dim strFID
InitializeFID
strFID = Request("FID")
Session("FIDlist").Add strFID, now()
End Sub
4、在正式处理用户提交的表单之前,应用CheckFID()函数在Dictionary对象中检查它的FID是否已经登记,如已经登记,它返回FALSE,否则返回TRUE:
Function CheckFID()
Dim strFID
InitializeFID
strFID = Request("FID")
CheckFID = not Session("FIDlist").Exists(strFID)
End Function
二、将上面四个子程序放入包含文件forms.inc中,再根据FID值来决定生成表单还是处理表单结果,看看完整代码:
< %Option Explicit%>
< !--#include file="forms.inc"-->
< HTML>
< HEAD>
< TITLE>防止表单多次提交 - asp之家 www.aspxhome.com< /TITLE>
< /HEAD
< BODY>
< %
If Request("FID") = "" Then
GenerateForm
Else
ProcessForm
End If
%>
< /BODY>
< /HTML>
< %
Sub GenerateForm()
' GenerateForm负责生成表单,表单中应该含有一个隐藏的FID
%>
< 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="确定">
< /form>
< %
End Sub
%>
< %
Sub ProcessForm()
' ProcessForm负责处理通过表单提交的内容,但在处理之前应该先调用CheckFID()检查当前表单是否已经提交
If CheckFID() Then
Response.Write "您输入的内容是" & Request.QueryString("param1")
RegisterFID
Else
Response.Write "噢,您已经提交过一次了!"
End If
End Sub
%>