为了防止用户通过后退和刷新提交页面而产生的重复提交,可以采用以下办法。
防止后退:页面顶部加入以下代码,禁止浏览器缓存页面
<% '禁止后退
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()打开的窗口怎么后退?能后退到哪里去?其实最简单的方法就是提交后在服务器端直接转跳,但是这样看不到提示信息了。。。。