上一篇:了解MSMQ,控制ASP进程 (一) >>
在ASP应用中如何限制同一表单被多次提交!!!!好东西
本文介绍在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>
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或数据库来保存相关数据了。
⑶ 这种方法是不安全的。它仅用于防范误操作,不能防止熟练用户有意地多次提交同一表单。
()
下一篇:ASP环境下邮件列表功能的实现 (四)(推荐) >>
相关文章:
- · 一个BBS的源代码(三)
- · 一个BBS的源代码(二)
- · 一个BBS的源代码(一)
- · 如何实现动态添加Html文档中Form项
- · 组件对象开发Web应用的实例分析
- · 如何使用ASP在自己的网站建立投票机制(二)
- · 如何使用ASP在自己的网站建立投票机制(一)
- · 优化MICROSOFT ACCESS提高速度
- · 网络开发之编程技巧之一(有效验证用户的登录)
- · IIS 5.0新功能
- · WINDOWS 2000搭載ASP3.0和IIS5.0
- · 如何使用 Microsoft Access 和 Active Server Pages 加密你的页面
- · IIS5 + ADO 2.5新先睹为快技术(二)
- · IIS5 + ADO 2.5新先睹为快技术(一)
- · ASP 3.0 新特色先睹为快(二)
- · ASP 3.0 新特色先睹为快(一)
- · 如何用ASP编写网站统计系统四
- · 如何用ASP编写网站统计系统三
- · 如何用ASP编写网站统计系统二
- · 如何用ASP编写网站统计系统一
- · 构建你的网站新闻自动发布系统之四
- · 构建你的网站新闻自动发布系统之三
- · 构建你的网站新闻自动发布系统之二
- · 构建你的网站新闻自动发布系统之一
- · ASP的Internet/Intranet编程常见问题
- · 一个简单聊天室的建立.(供学习参考)
- · 用ASP实现一个真正的注册页面
- · 在ASP中常见的错误80004005信息和解决办法
- · ADO存取数据时如何实现留言记录的分页显示
- · 用ASP实现网页BBS
- · 网页在线人数统计的做法
- · 聊天室实现私聊(四)
- · 聊天室实现私聊(三)
- · 聊天室实现私聊(二)
- · 聊天室实现私聊(一)
- · 用ASP实现网页保密的两种方法
- · 利用ASP规划聊天室
- · 用ASP建立站内搜索
