asp表单安全 --- 防止后退和刷新多次提交表单

Posted on 2009-03-24 23:55  萧木柯  阅读(2633)  评论(0编辑  收藏  举报

为了防止用户通过后退和刷新提交页面而产生的重复提交,可以采用以下办法。

防止后退:页面顶部加入以下代码,禁止浏览器缓存页面

<%  '禁止后退
Response.Buffer = True 
Response.ExpiresAbsolute = Now() - 1
Response.Expires = 0
Response.CacheControl = "no-cache"
%>

防止刷新提交页而产生重复提交:

STEP1、我在表单提交页设置 <% Session.Contents("work")="yes" %>

<input name="work" type="hidden" id="work" value="<%=session("work")%>">  这个隐藏域不要也可以

 

STEP2、在处理提交表单数据页(add_work.asp)有一个判断代码:

<%if Session.Contents("work")="yes" then %>

%
set rs=server.createobject("adodb.recordset")
sql="select * from work"
rs.open sql,conn,1,3
rs.addnew
work_ask=request.form("work_ask")

rs("work_ask")=work_ask

 rs.update   '更新数据表记录
rs.close
set rs=nothing
conn.close
Set conn=Nothing
Session.Contents("work")="no"            '更新成功后将值设置为no
%>

<h1>表单提交成功</h1>

<% Else If Session.Contents("work")="no" then     '不成功则提示然后转跳
  response.write ("<script language='javascript'>alert('请勿重复提交!');location='index.asp';</script>")
  end if
  %>

以上方法试验过可行,还有其它方法:如用window.open弹出表单页面,点提交后关闭该页;处理提交的ASP页也是用弹出,设定表单的target,点提交时window.open("XXX.asp","_blank"),然后用JS来提交表单,完成后window.close();
简单的说,就是提交表单的时候弹出新窗口,关闭本窗口。对于window.open()打开的窗口怎么后退?能后退到哪里去?其实最简单的方法就是提交后在服务器端直接转跳,但是这样看不到提示信息了。。。。