|
|
登录后查才能浏览下载更多咨询,有问题联系QQ:3283999
您需要 登录 才可以下载或查看,没有账号?入住遨海湾
×
提交后禁用提交按钮(大部分人都是这样做的)
, V+ j9 |" s/ n1 x( ]8 u- {/ ^" a) r( B; \, A/ O, \
如果客户提交后,按F5刷新怎么办?) ?1 c2 @# t8 c4 w
. `0 \2 t# Z3 W/ x* v
使用Session5 \7 Z2 ~* I! H
W$ B. v, e" D9 K在提交的页面也就是数据库处理之前:2 M6 K4 Y0 K1 q, `9 {
3 E3 r0 |. l' o) C& v& [' y2 Zif session("ok")=true then
- T- b# b5 G- u9 e' C1 M- o response.write "错误,正在提交", e/ K2 c: N, l9 e
response.end6 Q$ d0 |/ R9 ]1 S" R9 q
end if0 W( h6 I- R2 }# x- L3 ]- h9 E1 W
' a4 d; i0 m( s' ?, Z
数据处理完后,修改session("ok")=false。
& ?* ~; u, K/ ^5 a
( _) L8 j% W3 A数据处理成功马上Redirect到另外一个页面
6 ~! l4 f |; [% w9 N8 V
2 L' r- Q7 d, D- k操作后刷新的确是个问题,你可以使用跳转页面、关闭本页面,如果是有参数据条件来控制的,那就应该好做了,可以直接修改window.location的值,把参数全部改掉,这样就差不多了。 9 `9 F4 E3 e( y& H. P1 X; ?3 g$ K+ ?
/ P/ Z) P! Z) I9 B8 B
缺点:简单地运用Response.Redirect将不再有效,因为用户从一个页面转到另一个页面,我们都必须用客户端代码清除location.history。注意,这种方法清除的是最后一个访问历史记录,而不是全部的访问记录。 点击后退按钮,再点击后退按钮,你可以看到这时打开的是本页面之前的页面!(当然,这是在你的客户端启用了JavaScript功能的条件下。)
# G4 l4 D/ N8 V7 ^5 L9 n. x0 @5 t$ Q5 ~0 v2 `2 L
如果客户按后退,怎么办?
' [$ K% `5 X9 A/ a: w9 W
; m& s! Z: Y M/ N4 A5 B防止网页后退--禁止缓存- ~0 z. j I: n8 i
" t' L; S/ g. L& `( x我们在进行数据库添加操作的时候,如果允许后退,而正巧有刷新了页面,就会再次执行添加操作,无疑这不是我们需要的,像一般网上很多禁止缓存的代码,有时并不可靠,这时你只要在操作的页面加上就可以了,在网页的里指定要定向的新页,再点后退,看是不是不会再退到刚才的操作页面了,实际上已经把这个历史给删除了 ) O, O% h/ ^% s
# i( v. I+ r9 T- x% ~ B$ Q# |
ASP:
9 i) x& k d% T' [$ F2 Z: `Response.Buffer = True
8 q# m8 ~7 [$ T9 \2 c2 C: E" GResponse.ExpiresAbsolute = Now() - 1 & ^. |3 V% l2 ~. r. m! N( x
Response.Expires = 0
+ C& h- Y) c# O* D4 R4 qResponse.CacheC
5 \, o& [1 z7 \0 z0 N6 j6 N7 j/ ^7 H& _
ASP.NET:
5 L& M% T4 b! L, _" E! B( l# hResponse.Buffer=true;% r/ \2 U& T- u. S( f7 r6 o
Response.ExpiresAbsolute=DateTime.Now.AddSeconds(-1);
7 G- h$ o+ ?5 I; g ~* I$ K. aResponse.Expires=0;
2 y% r$ K( x! F8 U6 m" S# AResponse.CacheC;
& r1 P/ X( N7 h8 X) M. N
2 t/ |9 x) o7 x s+ T" m# P, c究竟怎样才能"禁用"浏览器的后退按钮?或者“怎样才能防止用户点击后退按钮返回以前浏览过的页面?”, y* h" C' ]$ }7 ^* {- U
, S1 T( q/ \1 k, G, p* p8 n
遗憾的是,我们无法禁用浏览器的后退按钮。
: x5 x1 H5 J" E( O+ D8 [' s) d9 t
防止网页后退--新开窗口
' w8 t- W8 ?) r8 U! X$ d) X" b4 ?; a" l, i/ b8 c! R
用window.open弹出表单页面,点提交后关闭该页;处理提交的ASP页也是用弹出,设定表单的target,点提交时window.open("XXX.asp","_blank"),然后用JS来提交表单,完成后window.close();
- f* x' x: y6 }简单的说,就是提交表单的时候弹出新窗口,关闭本窗口。对于window.open()打开的窗口怎么后退?能后退到哪里去?: e% J$ R1 c4 |0 n1 o4 R+ x1 G! C) A7 P/ r
: U' M" f) r2 R
又一个新方法,放在ASP页面前面就可以了,其他如JSP也可以仿照一下~~
1 R3 j- \, X- {' L7 [5 X% o( {6 O" v3 v! S" _# \
<%+ o- o: h9 Q( _' ~- E0 M/ A7 _3 H
dim RefreshIntervalTime
% y. e/ j7 A& x" V+ {7 QRefreshIntervalTime = 3 '防止刷新的时间秒数,0表示不防止
( I3 y, U' q( R' gIf Not IsEmpty(Session("visit")) and isnumeric(Session("visit")) and int(RefreshIntervalTime) > 0 Then7 p2 V) D3 w( Z; u# R- \
if (timer()-int(Session("visit")))*1000 < RefreshIntervalTime * 1000 then
: G$ f+ p3 g, m7 Y; V& O( H/ R. p+ i Response.write ("<meta http-equiv=""refresh"" c"& RefreshIntervalTime &""" />")
; d, _/ [( E7 y/ u6 x Response.write ("刷新过快,请稍候")* t, H/ h9 Q C0 ?. m8 R1 N
Session("visit") = timer()% l0 @" A1 E7 P
Response.end
9 H v# L4 A5 ~: B; ~3 ]end if* F( @0 x- X5 b. o: P1 @: M( [# O
End If
! k+ l( s! j0 C% d) rSession("visit") = timer()
6 O) i5 ]3 P$ D$ Z%> |
|