设为首页
加入收藏
帮助中心
首页 | 红盾通告 | 信息中心 | ASP技术 | 数据库 | 网页设计 | 网管专栏 | OICQ攻略 | 墨客频道 | 网站运营 |
当前位置:首页 >> ASP技术 >> ASP技巧 >> 正文
最新信息
·ASP防止采集的代码
·文字防复制乱码
·关于ASP中的UTF8编码
·ASP精典之常用函数收集
·用正则式除去HTML标记
·ASP国际化多语言详细方案
·改进 ASP 的字符串处理性能
·ASP缓存技术
·巧用ASP技术保护DHTML源代…
·ASP读取系统时区的错误行为…
资料搜索
热点信息
·删除数组中的重复元素
·ASP中转换unicode码为GB码…
·asp得到当前页地址
·关于ASP中的UTF8编码
·判断上一页的来源
·Asp中有关字符编码转换的几…
·用正则式除去HTML标记
·ASP 三十二条精华代码
·动检测上传文件是否含有非…
·常用过滤函数
推荐信息
·ASP 三十二条精华代码
·ASP中转换unicode码为GB码…
·如何拒绝同一张表单被多次…
·常用过滤函数
·常用asp代码
·Asp中有关字符编码转换的几…
·获得上一个月几月
·计算文件下载时间
·三条语句搞定路径
·判断上一页的来源


Google
 
在ASP应用中如何限制同一表单被多次提交
〖编辑:Cloudy | 浏览:人次〗

 在Internet上我们每天都会遇到数不清的表单,也看到其中大部分并没有限制用户多次提交同一个表单。缺乏这种限制有时候会产生某些预料不到的结果,如重复订阅邮件服务或重复投票等。

   本文介绍在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%>
< !--#include file="forms.inc"-->
< HTML>
< HEAD>
< TITLE>表单提交测试< /TITLE>
< /HEAD
< BODY>
< %
If Request("FID") = "" Then
GenerateForm
Else
ProcessForm
End If
%>
< /BODY>
< /HTML> 


录入时间:2006-05-09 16:38:19 [打印本页] [关闭窗口] [返回顶部]
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

Copyright © 2006-2014 0733168.Com Inc All Rights Reserved
关于我们 | 广告合作 | 联系我们 | 法律声明 | 友情链接 | 意见反馈
本站所收录信息、社区话题、及本站所做之广告均属其个人行为,与本站立场无关
湘ICP备06008436号