怎样防止用户刷新页面时重复提交上一页post过来的数据?!

时间:2022-09-11 23:16:04
数据从A提交到B页,post方法,比如是新增留言,
此时刷新B页,浏览器会出现提示:
“...请单击重试再次发送信息...”
如何让用户刷新B页但又不要重复提交数据?!
如果是提交修改信息也就罢了,但很多时候都是新增记录,
这时刷新就会重复的新增记录
右键被屏蔽了,但F5键屏蔽不了,return false对F5键不起作用
(绝非A页面过期问题,就算我让A页面过期了,B页面刷新,post的数据照提交不误,烦)

23 个解决方案

#1


从A提交到B的是后先查询数据库,如果没有相同的记录则插入数据,否则提示错误,这样,永远不会重复提交了

#2


(1)处理完后马上跳转地址
(2)限制一同一人相邻两帖时间间隔

#3


用SESSION了,在你的表单页里加入SESSION("saved")=0然后在保存页里先看一下是不为0是则保存并执行下一句session("saved")=1

#4


第一次提交后设一个session(),然后再次提交后,可通过session()判断防止信息再次写入数据库里

#5


对,强烈同意楼上。

#6


用session 判断把

#7


有没有其它方法?!
不可能设置Session吧,一个文员要新增N个页面,难道我跟她开N个Session?
那一个系统有N个文员在用怎么办?!N×N?!

#8


(1)处理完后马上跳转地址
有个中间添加成功页面(2秒钟)

#9


"处理完后马上跳转地址",这是最简单有效的方法,csdn也是这么做的。

#10


在数据处理页面最后加上
<script language="javascript">
window.location.href="ok.asp";
</script>

#11


在数据处理页面最后加上
<script language="javascript">
window.location.href="ok.asp";
</script>

#12


在数据处理页面最后加上
<script language="javascript">
window.location.href="ok.asp";
</script>

#13


完了完了,
我是当页提交到当页,还有一些查询参数要传递,
要跳转的话....我不又要折腾那些querystring和input?!
:)

#14


数据处理单独做一个页.

填写数据的页面加上清除缓存的语句.

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

清除缓存..

#15


当前页也没有关系呀
这样做:
<script language="javascript">
top.location.href="文件名"; '还是跳到本文件
</script>

#16


还是用session保险点

#17


当页提交到当页

那就好办了~~~~~

#18


CSDN的提交与处理是在框架页内(IFrame)进行的,处理完后只要在框架页内用脚本刷新top frame,这样就不用处理查询参数了(查询结果在主Frame中显示)

#19


to : angelheavens(龙辉) 
拜托,我是说要折腾我那些querystring和input,有些参数必须传递的啊~~
而且我基本上每个页面都要传参的啊

#20


哈哈,到底还是csdn的NB,我以后试试

#21


不可能设置Session吧,一个文员要新增N个页面,难道我跟她开N个Session?
那一个系统有N个文员在用怎么办?!N×N?!

什么逻辑呀?

设计思路:
'利用动态session("flag")来判断是否添加数据
'如果刷新页面,session("flag")=request("flag")
<% if request("submit")="提交" and request("flag")<>"" and session("flag")<>request("flag") then %> 
……
'提交后处理程序
……
'处理后,设置
session("flag")=Request("flag")
<% end if %>

#填写表单
<%
Dim num
Randomize
num = Int((1000-1+1)*Rnd+1) '动态获取flag的值
%> 
<form>
……
<input type=hidden name=flag value="<%=num%>" >
……
<input type=submit name=submit value="提交" >
</form>

#22


可以把A页B页的内容都放在一页里,或用session()来判断一下。

#23


我也是用js跳转;不过反应有点慢!

#1


从A提交到B的是后先查询数据库,如果没有相同的记录则插入数据,否则提示错误,这样,永远不会重复提交了

#2


(1)处理完后马上跳转地址
(2)限制一同一人相邻两帖时间间隔

#3


用SESSION了,在你的表单页里加入SESSION("saved")=0然后在保存页里先看一下是不为0是则保存并执行下一句session("saved")=1

#4


第一次提交后设一个session(),然后再次提交后,可通过session()判断防止信息再次写入数据库里

#5


对,强烈同意楼上。

#6


用session 判断把

#7


有没有其它方法?!
不可能设置Session吧,一个文员要新增N个页面,难道我跟她开N个Session?
那一个系统有N个文员在用怎么办?!N×N?!

#8


(1)处理完后马上跳转地址
有个中间添加成功页面(2秒钟)

#9


"处理完后马上跳转地址",这是最简单有效的方法,csdn也是这么做的。

#10


在数据处理页面最后加上
<script language="javascript">
window.location.href="ok.asp";
</script>

#11


在数据处理页面最后加上
<script language="javascript">
window.location.href="ok.asp";
</script>

#12


在数据处理页面最后加上
<script language="javascript">
window.location.href="ok.asp";
</script>

#13


完了完了,
我是当页提交到当页,还有一些查询参数要传递,
要跳转的话....我不又要折腾那些querystring和input?!
:)

#14


数据处理单独做一个页.

填写数据的页面加上清除缓存的语句.

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

清除缓存..

#15


当前页也没有关系呀
这样做:
<script language="javascript">
top.location.href="文件名"; '还是跳到本文件
</script>

#16


还是用session保险点

#17


当页提交到当页

那就好办了~~~~~

#18


CSDN的提交与处理是在框架页内(IFrame)进行的,处理完后只要在框架页内用脚本刷新top frame,这样就不用处理查询参数了(查询结果在主Frame中显示)

#19


to : angelheavens(龙辉) 
拜托,我是说要折腾我那些querystring和input,有些参数必须传递的啊~~
而且我基本上每个页面都要传参的啊

#20


哈哈,到底还是csdn的NB,我以后试试

#21


不可能设置Session吧,一个文员要新增N个页面,难道我跟她开N个Session?
那一个系统有N个文员在用怎么办?!N×N?!

什么逻辑呀?

设计思路:
'利用动态session("flag")来判断是否添加数据
'如果刷新页面,session("flag")=request("flag")
<% if request("submit")="提交" and request("flag")<>"" and session("flag")<>request("flag") then %> 
……
'提交后处理程序
……
'处理后,设置
session("flag")=Request("flag")
<% end if %>

#填写表单
<%
Dim num
Randomize
num = Int((1000-1+1)*Rnd+1) '动态获取flag的值
%> 
<form>
……
<input type=hidden name=flag value="<%=num%>" >
……
<input type=submit name=submit value="提交" >
</form>

#22


可以把A页B页的内容都放在一页里,或用session()来判断一下。

#23


我也是用js跳转;不过反应有点慢!