欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
網(wǎng)頁(yè)防刷新重復提交、防后退解決方法

====第一篇==開(kāi)始==========================================================================

總結: 重復提交、重復刷新、防止后退的問(wèn)題以及處理方式

 

一。前言
你在任何一個(gè)比較專(zhuān)業(yè)的BBS都會(huì )看到這樣的問(wèn)題,即使你Google一下,也會(huì )發(fā)現有很多的人在關(guān)注和詢(xún)問(wèn),但大家給出的解決方法卻都是千差萬(wàn)別,(有的人主張采用腳本來(lái)解決;有的則想重定向到別的頁(yè)面;有的則將此問(wèn)題提升到Token的角度)為什么會(huì )有如此大的差異呢?

二。問(wèn)題場(chǎng)景
首先,我們應該先了解為什么要處理這樣的問(wèn)題?或者專(zhuān)業(yè)一點(diǎn)就是它適合的場(chǎng)景是什么?(似乎只有人來(lái)問(wèn)沒(méi)有人來(lái)解釋?zhuān)?/p>

1。重復提交、重復刷新的場(chǎng)景
重復提交、重復刷新都是來(lái)解決系統重復記錄的問(wèn)題。也就是說(shuō)某個(gè)人在多次的提交某條記錄(為什么?也許是閑了沒(méi)有事情干的;最有可能是用戶(hù)根本就不知道自己的提交結果是否已經(jīng)執行了??。?。

但出現了這樣的問(wèn)題并不見(jiàn)得就必須處理,要看你所開(kāi)發(fā)的系統的類(lèi)別而定。比如你接手的是某個(gè)資源管理系統,系統本身從需求的角度根本就不允許出現"重復"的記錄,在這樣需求的約束條件下,去執行重復的提交動(dòng)作只會(huì )引發(fā)“業(yè)務(wù)級異?!钡漠a(chǎn)生,根本就不可能執行成功也就無(wú)所謂避免不避免的問(wèn)題了。

 

2。防止后退的場(chǎng)景
了解了重復刷新、重復提交的場(chǎng)景,我們來(lái)了解一下"防止后退"操作的原因是什么?比如你在開(kāi)發(fā)某個(gè)投票系統,它有很多的步驟,并且這些步驟之間是有聯(lián)系的,比如第一步會(huì )將某些信息發(fā)送給第二步,第二步緩存了這些信息,同時(shí)將自身的信息發(fā)送給了第三步。。。。。等等,如果此時(shí)用戶(hù)處在第三步驟下,我們想象一下某個(gè)淘氣用戶(hù)的用戶(hù)點(diǎn)擊了后退按鈕,此時(shí)屏幕出現了第二步驟的頁(yè)面,他再次的修改或者再次的提交,進(jìn)入到下一個(gè)步驟(也就是第三步驟),錯誤就會(huì )在此產(chǎn)生?!什么錯誤呢?最為典型的就是這樣的操作直接導致了對于第一個(gè)步驟信息的丟失?。ㄈ绻@樣的信息是依靠Request存放的話(huà),當然你可以存放在Session或者更大的上下文環(huán)境中,但這不是個(gè)好主意!關(guān)于信息存放的問(wèn)題,下次在就這個(gè)問(wèn)題詳細的討論)


三。如何處理的問(wèn)題
當然很多的系統(比如訂票系統從需求上本身是允許個(gè)人重復訂票的)是必須要避免重復刷新、重復提交、以及防止后退的問(wèn)題的,但即使是這樣的問(wèn)題,也要區分如何處理以及在哪里處理的(網(wǎng)上只是告訴你如何處理,但很少去區分在哪里處理的),顯然處理的方式無(wú)非是客戶(hù)端或者服務(wù)器端兩種,而面對不同的位置處理的方式也是不同的,但有一點(diǎn)要事先聲明:任何客戶(hù)端(尤其是B/S端)的處理都是不可信任的,最好的也是最應該的是服務(wù)器端的處理方法。

客戶(hù)端處理:
面對客戶(hù)端我們可以使用Javascript腳本來(lái)解決,如下

1。重復刷新、重復提交
Ways One:設置一個(gè)變量,只允許提交一次。
<script language="javascript">
    var checkSubmitFlg = false;
    function checkSubmit() {
      if (checkSubmitFlg == true) {
         return false;
      }
      checkSubmitFlg = true;
      return true;
   }
   document.ondblclick = function docondblclick() {
    window.event.returnValue = false;
   }
   document.onclick = function doconclick() {
       if (checkSubmitFlg) {
         window.event.returnValue = false;
       }
   }
</script>
<html:form action="myAction.do" method="post" onsubmit="return checkSubmit();">

Way Two : 將提交按鈕或者image置為disable
<html:form action="myAction.do" method="post"
    onsubmit="getElById('submitInput').disabled = true; return true;">  
<html:image styleId="submitInput" src="images/ok_b.gif" border="0" />
</html:form>

2。防止用戶(hù)后退
這里的方法是千姿百態(tài),有的是更改瀏覽器的歷史紀錄的,比如使用window.history.forward()方法;有的是“用新頁(yè)面的URL替換當前的歷史紀錄,這樣瀏覽歷史記錄中就只有一個(gè)頁(yè)面,后退按鈕永遠不會(huì )變?yōu)榭捎??!北热缡褂胘avascript:location.replace(this.href); event.returnValue=false;


2.服務(wù)器端的處理(這里只說(shuō)Struts框架的處理)
利用同步令牌(Token)機制來(lái)解決Web應用中重復提交的問(wèn)題,Struts也給出了一個(gè)參考實(shí)現。

基本原理:
服務(wù)器端在處理到達的請求之前,會(huì )將請求中包含的令牌值與保存在當前用戶(hù)會(huì )話(huà)中的令牌值進(jìn)行比較,
看是否匹配。在處理完該請求后,且在答復發(fā)送給客戶(hù)端之前,將會(huì )產(chǎn)生一個(gè)新的令牌,該令牌除傳給
客戶(hù)端以外,也會(huì )將用戶(hù)會(huì )話(huà)中保存的舊的令牌進(jìn)行替換。這樣如果用戶(hù)回退到剛才的提交頁(yè)面并再次
提交的話(huà),客戶(hù)端傳過(guò)來(lái)的令牌就和服務(wù)器端的令牌不一致,從而有效地防止了重復提交的發(fā)生。

if (isTokenValid(request, true)) {
    // your code here
    return mapping.findForward("success");
} else {
    saveToken(request);
    return mapping.findForward("submitagain");
}

Struts根據用戶(hù)會(huì )話(huà)ID和當前系統時(shí)間來(lái)生成一個(gè)唯一(對于每個(gè)會(huì )話(huà))令牌的,具體實(shí)現可以參考
TokenProcessor類(lèi)中的generateToken()方法。

1. //驗證事務(wù)控制令牌,<html:form >會(huì )自動(dòng)根據session中標識生成一個(gè)隱含input代表令牌,防止兩次提交
2. 在action中:


       //<input type="hidden" name="org.apache.struts.taglib.html.TOKEN"
       // value="6aa35341f25184fd996c4c918255c3ae">
       if (!isTokenValid(request))
           errors.add(ActionErrors.GLOBAL_ERROR,
                      new ActionError("error.transaction.token"));
       resetToken(request); //刪除session中的令牌

3. action有這樣的一個(gè)方法生成令牌
   protected String generateToken(HttpServletRequest request) {
       HttpSession session = request.getSession();
       try {
           byte id[] = session.getId().getBytes();
           byte now[] =
               new Long(System.currentTimeMillis()).toString().getBytes();
           MessageDigest md = MessageDigest.getInstance("MD5");
           md.update(id);
           md.update(now);
           return (toHex(md.digest()));
       } catch (IllegalStateException e) {
           return (null);
       } catch (NoSuchAlgorithmException e) {
           return (null);
       }
   }

總結
對于重復提交、重復刷新、防止后退等等都是屬于系統為避免重復記錄而需要解決的問(wèn)題,在客戶(hù)端去處理需要針對每一種的可能提出相應的解決方案,然而在服務(wù)器端看來(lái)只不過(guò)是對于數據真實(shí)性的檢驗問(wèn)題,基于令牌的處理就是一勞永逸的方法。

同時(shí)我們也看到,從不同的角度去看待問(wèn)題,其解決的方法也是不同的??蛻?hù)端更追求的是用戶(hù)的操作,而服務(wù)端則將注意力放在了數據的處理上,所以在某個(gè)對于服務(wù)器端看似容易的問(wèn)題上,用客戶(hù)端來(lái)解決卻麻煩了很多!反之依然。所以在某些問(wèn)題的處理上我們需要綜合考慮和平衡,是用客戶(hù)端來(lái)解決?還是用服務(wù)器端來(lái)處理?

====第一篇==結束==========================================================================

 

====第二篇==開(kāi)始==========================================================================

網(wǎng)頁(yè)防刷新重復提交、防后退解決方法

提交后禁用提交按鈕(大部分人都是這樣做的)

如果客戶(hù)提交后,按F5刷新怎么辦?

使用Session

在提交的頁(yè)面也就是數據庫處理之前:

if session("ok")=true then
   response.write "錯誤,正在提交"
   response.end
end if

數據處理完后,修改session("ok")=false。

數據處理成功馬上Redirect到另外一個(gè)頁(yè)面

操作后刷新的確是個(gè)問(wèn)題,你可以使用跳轉頁(yè)面、關(guān)閉本頁(yè)面,如果是有參數據條件來(lái)控制的,那就應該好做了,可以直接修改window.location的值,把參數全部改掉,這樣就差不多了。

缺點(diǎn):簡(jiǎn)單地運用Response.Redirect將不再有效,因為用戶(hù)從一個(gè)頁(yè)面轉到另一個(gè)頁(yè)面,我們都必須用客戶(hù)端代碼清除location.history。注意,這種方法清除的是最后一個(gè)訪(fǎng)問(wèn)歷史記錄,而不是全部的訪(fǎng)問(wèn)記錄。 點(diǎn)擊后退按鈕,再點(diǎn)擊后退按鈕,你可以看到這時(shí)打開(kāi)的是本頁(yè)面之前的頁(yè)面?。ó斎?,這是在你的客戶(hù)端啟用了JavaScript功能的條件下。)

如果客戶(hù)按后退,怎么辦?

防止網(wǎng)頁(yè)后退--禁止緩存

我們在進(jìn)行數據庫添加操作的時(shí)候,如果允許后退,而正巧有刷新了頁(yè)面,就會(huì )再次執行添加操作,無(wú)疑這不是我們需要的,像一般網(wǎng)上很多禁止緩存的代碼,有時(shí)并不可靠,這時(shí)你只要在操作的頁(yè)面加上就可以了,在網(wǎng)頁(yè)的里指定要定向的新頁(yè),再點(diǎn)后退,看是不是不會(huì )再退到剛才的操作頁(yè)面了,實(shí)際上已經(jīng)把這個(gè)歷史給刪除了

ASP:
Response.Buffer = True   
Response.ExpiresAbsolute = Now() - 1   
Response.Expires = 0   
Response.CacheControl = "no-cache"

ASP.NET:
Response.Buffer=true;
Response.ExpiresAbsolute=DateTime.Now.AddSeconds(-1);
Response.Expires=0;
Response.CacheControl="no-cache";

究竟怎樣才能"禁用"瀏覽器的后退按鈕?或者“怎樣才能防止用戶(hù)點(diǎn)擊后退按鈕返回以前瀏覽過(guò)的頁(yè)面?”

遺憾的是,我們無(wú)法禁用瀏覽器的后退按鈕。

防止網(wǎng)頁(yè)后退--新開(kāi)窗口

用window.open彈出表單頁(yè)面,點(diǎn)提交后關(guān)閉該頁(yè);處理提交的ASP頁(yè)也是用彈出,設定表單的target,點(diǎn)提交時(shí)window.open("XXX.asp","_blank"),然后用JS來(lái)提交表單,完成后window.close();
簡(jiǎn)單的說(shuō),就是提交表單的時(shí)候彈出新窗口,關(guān)閉本窗口。對于window.open()打開(kāi)的窗口怎么后退?能后退到哪里去?

呵呵,羅嗦了一堆廢話(huà),知道怎么處理了么?混合運用客戶(hù)端腳本和服務(wù)器端腳本。

====第二篇==結束==========================================================================

====第三篇==開(kāi)始==========================================================================

看了網(wǎng)上的,有幾種方法:
1 在你的表單頁(yè)里HEAD區加入這段代碼:
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
2
生成一個(gè)令牌保存在用戶(hù)session中,在form中加一個(gè)hidden域,顯示該令
牌的值,form提交后重新生成一個(gè)新的令牌,將用戶(hù)提交的令牌和session
中的令牌比較,如相同則是重復提交
3
在你的服務(wù)器端控件的代碼中使用Response.Redirect("selfPage")語(yǔ)句。但是大多的數都不使用這種方法。
方法還有很多。。。
4
<input type="button" value="提交" onclick="this.disabled=true;this.form.submit()">

5

在JSP頁(yè)面的FORM表單中添加一個(gè)hidden域  
<input   type="hidden"   name="url"value=<%=request.getRequestURL()%>>  
   
在你的serverlet中添加如下語(yǔ)句  
String   url=request.getParameter("url");  
response.sendRedirect(url);  
我一般都是采用這樣的方法返回JSP頁(yè)面的,不太明白你說(shuō)的重復刷新是什么概念  

6 ajax 無(wú)刷新提交

7 Web開(kāi)發(fā)中防止瀏覽器的刷新鍵引起系統操作重復提交
怎么解決呢?重定向可以解決頁(yè)面刷新帶來(lái)的數據的重復提交的問(wèn)題,我們自然可以利用重定向的方式來(lái)解決這個(gè)問(wèn)題。但是struts的action里面mapping.findword();跳轉的話(huà),默認的是在工程文件夾里面找要跳轉的頁(yè)面。這種情況,怎么解決呢?
修改struts-config.xml 文件, 在action里面有一個(gè)redirect重新定向的屬性,struts中默認的是false,添加這個(gè)屬性,改成true,在forword中寫(xiě)上要跳轉頁(yè)面的絕對或者相對地址就行了
修改如下:
<action-mappings>
<action attribute="newsActionForm" name="newsActionForm"
   input="/addnews.jsp" path="/newsAction" parameter="method"
   scope="request" type="com.yongtree.news.action.NewsAction">
   <forward name="list" path="/listnews.jsp" redirect="true"></forward>
   <forward name="error" path="/addnews.jsp"></forward>
</action>
</action-mappings>


====第三篇==結束==========================================================================

====第四篇==開(kāi)始==========================================================================

瀏覽器相關(guān)難處理的問(wèn)題

瀏覽器的后退按鈕使得我們能夠方便地返回以前訪(fǎng)問(wèn)過(guò)的頁(yè)面,它無(wú)疑非常有用。但有時(shí)候我們不得不關(guān)閉這個(gè)功能,以防止用戶(hù)打亂預定的頁(yè)面訪(fǎng)問(wèn)次序。本文介紹網(wǎng)絡(luò )上可找到的各種禁用瀏覽器后退按鈕方案,分析它們各自的優(yōu)缺點(diǎn)和適用場(chǎng)合。    

一、概述    
   
     曾經(jīng)有許多人問(wèn)起,“怎樣才能‘禁用’瀏覽器的后退按鈕?”,或者“怎樣才能防止用戶(hù)點(diǎn)擊后退按鈕返回以前瀏覽過(guò)的頁(yè)面?”在A(yíng)SP論壇上,這個(gè)問(wèn)題也是問(wèn)得最多的問(wèn)題之一。遺憾的是,答案非常簡(jiǎn)單:我們無(wú)法禁用瀏覽器的后退按鈕。    
     起先我對于居然有人想要禁用瀏覽器的后退按鈕感到不可思議。后來(lái),看到竟然有那么多的人想要禁用這個(gè)后退按鈕,我也就釋然(想要禁用的只有后退按鈕,不包括瀏覽器的前進(jìn)按鈕)。因為在默認情況下,用戶(hù)提交表單之后可以通過(guò)后退按鈕返回表單頁(yè)面(而不是使用“編輯”按鈕?。?,然后再次編輯并提交表單向數據庫插入新的記錄。這是我們不愿看到的。    
     因此我就決定要找出避免出現這種情況的方法。我訪(fǎng)問(wèn)了許多網(wǎng)站,參考了這些網(wǎng)站所介紹的各種實(shí)現方法。如果你經(jīng)常訪(fǎng)問(wèn)ASP編程網(wǎng)站,本文所介紹的部分內容你可能已經(jīng)見(jiàn)到過(guò)。本文的任務(wù)是把各種可能的方法都介紹給大家,然后找出最好的方法!    

二、禁止緩存    

     在我找到的許多方案中,其中有一種建議禁止頁(yè)面緩存。具體是使用服務(wù)器端腳本,如下所示:     
<%    
Response.Buffer   =   True    
Response.ExpiresAbsolute   =   Now()   -   1    
Response.Expires   =   0    
Response.CacheControl   =   "no-cache"    
%>    
     這種方法非常有效!它強制瀏覽器重新訪(fǎng)問(wèn)服務(wù)器下載頁(yè)面,而不是從緩存讀取頁(yè)面。使用這種方法時(shí),編程者的主要任務(wù)是創(chuàng )建一個(gè)會(huì )話(huà)級的變量,通過(guò)這個(gè)變量確定用戶(hù)是否仍舊可以查看那個(gè)不適合通過(guò)后退按鈕訪(fǎng)問(wèn)的頁(yè)面。由于瀏覽器不再緩存這個(gè)頁(yè)面,當用戶(hù)點(diǎn)擊后退按鈕時(shí)瀏覽器將重新下載該頁(yè)面,此時(shí)程序就可以檢查那個(gè)會(huì )話(huà)變量,看看是否應該允許用戶(hù)打開(kāi)這個(gè)頁(yè)面。    
   
     例如,假設我們有如下表單:    
   
<%    
Response.Buffer   =   True    
Response.ExpiresAbsolute   =   Now()   -   1    
Response.Expires   =   0    
Response.CacheControl   =   "no-cache"    
If   Len(Session("FirstTimeToPage"))   >   0   then    
&single;   用戶(hù)已經(jīng)訪(fǎng)問(wèn)過(guò)當前頁(yè)面,現在是再次返回訪(fǎng)問(wèn)。    
&single;   清除會(huì )話(huà)變量,將用戶(hù)重定向到登錄頁(yè)面。    
Session("FirstTimeToPage")   =   ""    
Response.Redirect   "/Bar.asp"    
Response.End    
End   If    
&single;   如果程序運行到這里,說(shuō)明用戶(hù)能夠查看當前頁(yè)面    
&single;   以下開(kāi)始創(chuàng )建表單    
%>    
<form   method=post   action="SomePage.asp">    
<input   type=submit>    
</form>    
   
     我們借助會(huì )話(huà)變量FirstTimeToPage檢查用戶(hù)是否是第一次訪(fǎng)問(wèn)當前頁(yè)面。如果不是第一次(即Session("FirstTimeToPage")包含某個(gè)值),那么我們就清除會(huì )話(huà)變量的值,然后把用戶(hù)重新定向到一個(gè)開(kāi)始頁(yè)面。這樣,當表單提交時(shí)(此時(shí)SompePage.asp被打開(kāi)),我們必須賦予FirstTimeToPage一個(gè)值。即,在SomePage.asp中我們需要加上下面的代碼:    
Session("FirstTimeToPage")   =   "NO"      
     這樣,已經(jīng)打開(kāi)SomePage.asp的用戶(hù)如果點(diǎn)擊后退按鈕,瀏覽器將重新請求服務(wù)器下載頁(yè)面,服務(wù)器檢查到Session("FirstTimeToPage")包含了一個(gè)值,于是就清除Session("FirstTimeToPage"),并把用戶(hù)重定向到其他頁(yè)面。當然,所有這一切都需要用戶(hù)啟用了Cookie,否則會(huì )話(huà)變量將是無(wú)效的。(有關(guān)該問(wèn)題的更多說(shuō)明,請參見(jiàn)For   session   ariables   to   work,   must   the   Web   visitor   have   cookies   enabled?)  
     另外,我們也可以用客戶(hù)端代碼使瀏覽器不再緩存Web頁(yè)面:    
<html>    
<head>    
<meta   http-equiv="Expires"   CONTENT="0">    
<meta   http-equiv="Cache-Control"   CONTENT="no-cache">    
<meta   http-equiv="Pragma"   CONTENT="no-cache">    
</head>    
     如果使用上面的方法強制瀏覽器不再緩存Web頁(yè)面,必須注意以下幾點(diǎn):    
   
只有在使用安全連接時(shí)“Pragma:   no-cache”才防止瀏覽器緩存頁(yè)面。對于不受安全保護的頁(yè)面,“Pragma:   no-cache”被視為與“Expires:   -1”相同,此時(shí)瀏覽器仍舊緩存頁(yè)面,但把頁(yè)面標記為立即過(guò)期。在IE   4或5中,“Cache-Control”META   HTTP-EQUIV標記將被忽略,不起作用。    
     在實(shí)際應用中我們可以加上所有這些代碼。然而,由于這種方法不能適用于所有的瀏覽器,所以是不推薦使用的。但如果是在Intranet環(huán)境下,管理員可以控制用戶(hù)使用哪種瀏覽器,我想還是有人會(huì )使用這種方法。    

三、其他方法    
   
     接下來(lái)我們要討論的方法以后退按鈕本身為中心,而不是瀏覽器緩存。這兒有一篇文章Rewiring   the   Back   Button很值得參考。不過(guò)我注意到,如果使用這種方法,雖然用戶(hù)點(diǎn)擊一下后退按鈕時(shí)他不會(huì )看到以前輸入數據的頁(yè)面,但只要點(diǎn)擊兩次就可以,這可不是我們希望的效果,因為很多時(shí)候,固執的用戶(hù)總是能夠找到繞過(guò)預防措施的辦法。    
     另外一種禁用后退按鈕的辦法是用客戶(hù)端JavaScript打開(kāi)一個(gè)沒(méi)有工具條的窗口,這使得用戶(hù)很難返回前一頁(yè)面,但不是不可能。一種更安全但相當惱人的方法是,當表單提交時(shí)打開(kāi)一個(gè)新的窗口,與此同時(shí)關(guān)閉表單所在的窗口。但我覺(jué)得這種方法不值得認真考慮,因為我們總不能讓用戶(hù)每提交一個(gè)表單就打開(kāi)一個(gè)新窗口。  
     那么,在那個(gè)我們不想讓用戶(hù)返回的頁(yè)面是否也可以加入JavaScript代碼呢?在這個(gè)頁(yè)面中加入的JavaScript代碼可用來(lái)產(chǎn)生點(diǎn)擊前進(jìn)按鈕的效果,這樣也就抵消了用戶(hù)點(diǎn)擊后退按鈕所產(chǎn)生的動(dòng)作。用于實(shí)現該功能的JavaScript代碼如下    
   
所示:    
<script   language="JavaScript">    
<!--    
javascript:window.history.forward(1);    
//-->    
</script>    

     同樣地,這種方法雖然有效,但距離“最好的方法”還差得很遠。后來(lái)我又看到有人建議用location.replace從一個(gè)頁(yè)面轉到另一個(gè)頁(yè)面。這種方法的原理是,用新頁(yè)面的URL替換當前的歷史紀錄,這樣瀏覽歷史記錄中就只有一個(gè)頁(yè)面,后退按鈕永遠不會(huì )變?yōu)榭捎?。我想這可能正是許多人所尋求的方法,但這種方法仍舊不是任何情況下的最好方法。使用這種方法的實(shí)例如下所示:       
<A   HREF="PageName.htm"   onclick="javascript:location.replace(this.href);    
   event.returnValue=false;">禁止后退到本頁(yè)面的鏈接</A>     
     禁止后退到本頁(yè)面的鏈接!     
     這種方法的缺點(diǎn)在于:簡(jiǎn)單地運用Response.Redirect將不再有效,這是因為每次用戶(hù)從一個(gè)頁(yè)面轉到另一個(gè)頁(yè)面,我們都必須用客戶(hù)端代碼清除location.history。另外還要注意,這種方法清除的是最后一個(gè)訪(fǎng)問(wèn)歷史記錄,而不是全部的訪(fǎng)問(wèn)記錄。     
     點(diǎn)擊上面的鏈接,你將打開(kāi)一個(gè)簡(jiǎn)單的HTML頁(yè)面。再點(diǎn)擊后退按鈕,你可以看到這時(shí)打開(kāi)的不是本頁(yè)面,而是本頁(yè)面之前的頁(yè)面?。ó斎?,你必須在瀏覽器中啟用了客戶(hù)端JavaScript代碼。)     
     經(jīng)過(guò)一番仔細的尋尋覓覓之后,我發(fā)現仍舊無(wú)法找出真正能夠完全禁用瀏覽器后退按鈕的辦法。所有這里介紹的方法都能夠在不同程度上、以不同的方式禁止用戶(hù)返回前一頁(yè)面,但它們都有各自的局限。由于不存在能夠完全禁用后退按鈕的方法,所以最好的方案應該是:混合運用客戶(hù)端腳本和服務(wù)器端腳本。  
   
<html>    
<head>    
<meta   http-equiv="Expires"   CONTENT="0">    
<meta   http-equiv="Cache-Control"   CONTENT="no-cache">    
<meta   http-equiv="Pragma"   CONTENT="no-cache">    
</head>       

<script   language="JavaScript">     
<!--       
javascript:window.history.forward(1);     
//-->     
</script>
</html>

====第四篇==結束==========================================================================

====第五篇==開(kāi)始==========================================================================

Asp.net中防刷新重復提交、防后退方法
簡(jiǎn)單操作方法防后退和刷新
Page_Load中加入

Response.Cache.SetNoStore();

//Session中存儲的變量“IsSubmit”是標記是否提交成功的
if (!IsPostBack)
if (Session["IsSubmit"]==null)
Session.Add("IsSubmit",false);
if ((bool)Session["IsSubmit"])

{

//如果表單數據提交成功,就設“Session["IsSubmit"]”為false

Session["IsSubmit"] = false;

//顯示提交成功信息

TextBox1.Text = " * 提交成功!";

}
else

{//否則的話(huà)(沒(méi)有提交,或者是頁(yè)面刷新),不顯示任何信息

TextBox1.Text = "";
Response.End();
}
提交按鈕中加入
Session["IsSubmit"] = true;
Response.Redirect ("本頁(yè)");

====第五篇==結束==========================================================================

另外:

1、通常應該在業(yè)務(wù)層進(jìn)行判斷(唯一性)解決這種問(wèn)題

2、要在頁(yè)面裝載事件寫(xiě)上    Response.CacheControl = "no-cache"     清除緩存

3、也有人這樣說(shuō):我以前也碰到過(guò)這樣的問(wèn)題,是在分步提交中一個(gè)人的簡(jiǎn)歷,在寫(xiě)完第一個(gè)頁(yè)面后跳到第二個(gè)頁(yè)面,為了防止用戶(hù)用后退返回到第一個(gè)頁(yè)面,再重新提交第一個(gè)頁(yè)面,我是當用戶(hù)提交第一次提交第一個(gè)頁(yè)面時(shí),把插入數據庫中的記錄的自增長(cháng)id號放到session里,當用戶(hù)從第二個(gè)頁(yè)面返回到第一個(gè)頁(yè)面再一次提交該頁(yè)面時(shí),我就用session里的值去數據庫查,如果有這個(gè)id就用update語(yǔ)句把第一個(gè)頁(yè)面的數據寫(xiě)進(jìn)數據庫,如果沒(méi)有查到這個(gè)id,就用insert語(yǔ)句。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
怎樣實(shí)現禁止通過(guò)瀏覽器的后退按鈕訪(fǎng)問(wèn)以前的記錄?
防刷新重復提交、防后退方法
防止表單重復提交的幾種方法總結
PHP防止重復提交表單
Struts之通過(guò)Session Token(Session令牌)來(lái)防止表單重復提交
Struts解決表單重復提交問(wèn)題
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久