时间: 2021-07-31 作者:daque
正文引见在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或数据库来生存关系数据了。 ⑶ 这种本领是不安定的。它仅用来提防误操纵,不许提防流利用户蓄意地屡次提交同一表单。