亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 php教程 PHP開發(fā) JSP防止網(wǎng)頁刷新重複提交資料的幾種方法

JSP防止網(wǎng)頁刷新重複提交資料的幾種方法

Dec 06, 2016 pm 01:52 PM
node

本篇文章主要介紹了網(wǎng)頁如何防止刷新重複提交與如何防止後退的解決方法,具體如下:

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

如果客戶提交後,按F5刷新怎麼辦?

使用Session

在提交的頁面也就是資料庫處理之前:

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

? ?

資料處理完後,修改session("ok")=false。

資料處理成功馬上Redirect到另外一個(gè)頁面

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

缺點(diǎn):簡單地運(yùn)用Response.Redirect將不再有效,因?yàn)槭褂谜邚囊粋€(gè)頁面轉(zhuǎn)到另一個(gè)頁面,我們都必須用客戶端程式碼清除location.history。請注意,這種方法清除的是最後一個(gè)訪問歷史記錄,而不是全部的訪問記錄。 點(diǎn)選後退按鈕,再點(diǎn)選後退按鈕,你可以看到此時(shí)開啟的是本頁面之前的頁面! (當(dāng)然,這是在你的客戶端啟用了??JavaScript功能的條件下。)

如果客戶按後退,怎麼辦?

防止網(wǎng)頁後退--禁止快取

我們在進(jìn)行資料庫新增操作的時(shí)候,如果允許後退,而正巧有刷新了頁面,就會(huì)再次執(zhí)行新增操作,無疑這不是我們需要的,像一般網(wǎng)路上很多禁止快取的程式碼,有時(shí)並不可靠,這時(shí)你只要在操作的頁面加上就可以了,在網(wǎng)頁的里指定要定向的新頁,再點(diǎn)後退,看是不是不會(huì)再退到剛才的操作頁面了,實(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";

? ?

或「怎麼能防止使用者點(diǎn)擊後退按鈕返回先前瀏覽過的頁面?」

遺憾的是,我們無法停用瀏覽器的後退按鈕。

防止網(wǎng)頁後退--新開視窗


用window.open彈出表單頁面,點(diǎn)提交後關(guān)閉該頁;處理提交的ASP頁也是用彈出,設(shè)定表單的target,點(diǎn)提交時(shí)window.open(" XXX.asp","_blank"),然後用JS來提交表單,完成後window.close();

簡單的說,就是提交表單的時(shí)候彈出新窗口,關(guān)閉本窗口。對於window.open()開啟的視窗怎麼後退?能後退到哪裡去?

呵呵,囉嗦了一堆廢話,知道怎麼處理了麼?混合運(yùn)用客戶端腳本和伺服器端腳本。

jsp重複提交問題


看了網(wǎng)上的,有幾種方法:

1 在你的表單頁裡HEAD區(qū)加入這段程式碼:?

<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">

? ?

session中,在form中加一個(gè)hidden域,顯示該令牌的值,form提交後重新產(chǎn)生一個(gè)新的令牌,將使用者提交的令牌和session 中的令牌比較,如相同則是重複提交

3 在你的伺服器端控制項(xiàng)的程式碼中使用Response.Redirect("selfPage")語句。但是大多的數(shù)字都不使用這種方法。
方法還有很多。 。 。

4 、

<input type="button" value="提交" onclick="this.disabled=true;this.form.submit()">

? ?

5 在JSP頁面的FORM表單中新增一個(gè)hidden 域?

<input  type="hidden"  name="url"value=<%=request.getRequestURL()%>>

? Java

? ?

我一般都是採用這樣的方法返回JSP頁面的,不太明白你說的重複刷新是什麼概念?

6 ajax 無刷新提交

7 Web開發(fā)中防止瀏覽器的刷新鍵引起系統(tǒng)操作重複提交

怎麼解決呢?重定向可以解決頁面刷新帶來的資料的重複提交的問題,我們自然可以利用重定向的方式來解決這個(gè)問題。但struts的action裡面mapping.findword();跳轉(zhuǎn)的話,預(yù)設(shè)的是在工程資料夾裡面找要跳轉(zhuǎn)的頁面。這種情況,要怎麼解決呢?

修改struts-config.xml 文件, 在action裡面有一個(gè)redirect重新定向的屬性,struts中預(yù)設(shè)的是false,加入這個(gè)屬性,改成true,在forword中寫上要跳頁的絕對或相對地址就行了


修改如下:

   
String  url=request.getParameter("url"); 
response.sendRedirect(url);

? ?

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

瀏覽器的後退按鈕使得我們能夠方便地返回以前訪問過的頁面,它無疑有用。但有時(shí)候我們必須關(guān)閉這個(gè)功能,以防止使用者打亂預(yù)定的頁面存取次序。本文介紹網(wǎng)路上可找到的各種停用瀏覽器後退按鈕方案,分析它們各自的優(yōu)缺點(diǎn)和適用場合。???

一、概述

曾經(jīng)有許多人問起,“怎樣才能‘禁用'瀏覽器的后退按鈕?”,或者“怎樣才能防止用戶點(diǎn)擊后退按鈕返回以前瀏覽過的頁面?”在ASP論壇上,這個(gè)問題也是問得最多的問題之一。遺憾的是,答案非常簡單:我們無法禁用瀏覽器的后退按鈕。

起先我對于居然有人想要禁用瀏覽器的后退按鈕感到不可思議。后來,看到竟然有那么多的人想要禁用這個(gè)后退按鈕,我也就釋然(想要禁用的只有后退按鈕,不包括瀏覽器的前進(jìn)按鈕)。因?yàn)樵谀J(rèn)情況下,用戶提交表單之后可以通過后退按鈕返回表單頁面(而不是使用“編輯”按鈕!),然后再次編輯并提交表單向數(shù)據(jù)庫插入新的記錄。這是我們不愿看到的。

因此我就決定要找出避免出現(xiàn)這種情況的方法。我訪問了許多網(wǎng)站,參考了這些網(wǎng)站所介紹的各種實(shí)現(xiàn)方法。如果你經(jīng)常訪問ASP編程網(wǎng)站,本文所介紹的部分內(nèi)容你可能已經(jīng)見到過。本文的任務(wù)是把各種可能的方法都介紹給大家,然后找出最好的方法!

二、禁止緩存

在我找到的許多方案中,其中有一種建議禁止頁面緩存。具體是使用服務(wù)器端腳本,如下所示:

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

這種方法非常有效!它強(qiáng)制瀏覽器重新訪問服務(wù)器下載頁面,而不是從緩存讀取頁面。使用這種方法時(shí),編程者的主要任務(wù)是創(chuàng)建一個(gè)會(huì)話級的變量,通過這個(gè)變量確定用戶是否仍舊可以查看那個(gè)不適合通過后退按鈕訪問的頁面。由于瀏覽器不再緩存這個(gè)頁面,當(dāng)用戶點(diǎn)擊后退按鈕時(shí)瀏覽器將重新下載該頁面,此時(shí)程序就可以檢查那個(gè)會(huì)話變量,看看是否應(yīng)該允許用戶打開這個(gè)頁面。

例如,假設(shè)我們有如下表單:

<%  
Response.Buffer  =  True  
Response.ExpiresAbsolute  =  Now()  -  1  
Response.Expires  =  0  
Response.CacheControl  =  "no-cache"  
If  Len(Session("FirstTimeToPage"))  >  0  then  
&single;  用戶已經(jīng)訪問過當(dāng)前頁面,現(xiàn)在是再次返回訪問。  
&single;  清除會(huì)話變量,將用戶重定向到登錄頁面。  
Session("FirstTimeToPage")  =  ""  
Response.Redirect  "/Bar.asp"  
Response.End  
End  If  
&single;  如果程序運(yùn)行到這里,說明用戶能夠查看當(dāng)前頁面  
&single;  以下開始創(chuàng)建表單  
%>  
<form  method=post  action="SomePage.asp">  
<input  type=submit>  
</form>

我們借助會(huì)話變量FirstTimeToPage檢查用戶是否是第一次訪問當(dāng)前頁面。如果不是第一次(即Session("FirstTimeToPage")包含某個(gè)值),那么我們就清除會(huì)話變量的值,然后把用戶重新定向到一個(gè)開始頁面。這樣,當(dāng)表單提交時(shí)(此時(shí)SompePage.asp被打開),我們必須賦予FirstTimeToPage一個(gè)值。即,在SomePage.asp中我們需要加上下面的代碼:
Session("FirstTimeToPage") = "NO"

這樣,已經(jīng)打開SomePage.asp的用戶如果點(diǎn)擊后退按鈕,瀏覽器將重新請求服務(wù)器下載頁面,服務(wù)器檢查到Session("FirstTimeToPage")包含了一個(gè)值,于是就清除Session("FirstTimeToPage"),并把用戶重定向到其他頁面。當(dāng)然,所有這一切都需要用戶啟用了Cookie,否則會(huì)話變量將是無效的。

另外,我們也可以用客戶端代碼使瀏覽器不再緩存Web頁面:

<html>  
<head>  
<meta  http-equiv="Expires"  CONTENT="0">  
<meta  http-equiv="Cache-Control"  CONTENT="no-cache">  
<meta  http-equiv="Pragma"  CONTENT="no-cache">  
</head>

如果使用上面的方法強(qiáng)制瀏覽器不再緩存Web頁面,必須注意以下幾點(diǎn):

只有在使用安全連接時(shí)“Pragma: no-cache”才防止瀏覽器緩存頁面。對于不受安全保護(hù)的頁面,“Pragma: no-cache”被視為與“Expires: -1”相同,此時(shí)瀏覽器仍舊緩存頁面,但把頁面標(biāo)記為立即過期。在IE 4或5中,“Cache-Control”META HTTP-EQUIV標(biāo)記將被忽略,不起作用。

在實(shí)際應(yīng)用中我們可以加上所有這些代碼。然而,由于這種方法不能適用于所有的瀏覽器,所以是不推薦使用的。但如果是在Intranet環(huán)境下,管理員可以控制用戶使用哪種瀏覽器,我想還是有人會(huì)使用這種方法。

三、其他方法

接下來我們要討論的方法以后退按鈕本身為中心,而不是瀏覽器緩存。這兒有一篇文章Rewiring the Back Button很值得參考。不過我注意到,如果使用這種方法,雖然用戶點(diǎn)擊一下后退按鈕時(shí)他不會(huì)看到以前輸入數(shù)據(jù)的頁面,但只要點(diǎn)擊兩次就可以,這可不是我們希望的效果,因?yàn)楹芏鄷r(shí)候,固執(zhí)的用戶總是能夠找到繞過預(yù)防措施的辦法。

另外一種禁用后退按鈕的辦法是用客戶端JavaScript打開一個(gè)沒有工具條的窗口,這使得用戶很難返回前一頁面,但不是不可能。一種更安全但相當(dāng)惱人的方法是,當(dāng)表單提交時(shí)打開一個(gè)新的窗口,與此同時(shí)關(guān)閉表單所在的窗口。但我覺得這種方法不值得認(rèn)真考慮,因?yàn)槲覀兛偛荒茏層脩裘刻峤灰粋€(gè)表單就打開一個(gè)新窗口。

那么,在那個(gè)我們不想讓用戶返回的頁面是否也可以加入JavaScript代碼呢?在這個(gè)頁面中加入的JavaScript代碼可用來產(chǎn)生點(diǎn)擊前進(jìn)按鈕的效果,這樣也就抵消了用戶點(diǎn)擊后退按鈕所產(chǎn)生的動(dòng)作。用于實(shí)現(xiàn)該功能的JavaScript代碼如下所示:

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

同樣地,這種方法雖然有效,但距離“最好的方法”還差得很遠(yuǎn)。后來我又看到有人建議用location.replace從一個(gè)頁面轉(zhuǎn)到另一個(gè)頁面。這種方法的原理是,用新頁面的URL替換當(dāng)前的歷史紀(jì)錄,這樣瀏覽歷史記錄中就只有一個(gè)頁面,后退按鈕永遠(yuǎn)不會(huì)變?yōu)榭捎谩N蚁脒@可能正是許多人所尋求的方法,但這種方法仍舊不是任何情況下的最好方法。使用這種方法的實(shí)例如下所示:

<A  HREF="PageName.htm"  onclick="javascript:location.replace(this.href);  
  event.returnValue=false;">禁止后退到本頁面的鏈接</A>

禁止后退到本頁面的鏈接!

這種方法的缺點(diǎn)在于:簡單地運(yùn)用Response.Redirect將不再有效,這是因?yàn)槊看斡脩魪囊粋€(gè)頁面轉(zhuǎn)到另一個(gè)頁面,我們都必須用客戶端代碼清除location.history。另外還要注意,這種方法清除的是最后一個(gè)訪問歷史記錄,而不是全部的訪問記錄。

點(diǎn)擊上面的鏈接,你將打開一個(gè)簡單的HTML頁面。再點(diǎn)擊后退按鈕,你可以看到這時(shí)打開的不是本頁面,而是本頁面之前的頁面?。ó?dāng)然,你必須在瀏覽器中啟用了客戶端JavaScript代碼。)

經(jīng)過一番仔細(xì)的尋尋覓覓之后,我發(fā)現(xiàn)仍舊無法找出真正能夠完全禁用瀏覽器后退按鈕的辦法。所有這里介紹的方法都能夠在不同程度上、以不同的方式禁止用戶返回前一頁面,但它們都有各自的局限。由于不存在能夠完全禁用后退按鈕的方法,所以最好的方案應(yīng)該是:混合運(yùn)用客戶端腳本和服務(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>   
 


Asp.net中防刷新重復(fù)提交、防后退方法

簡單操作方法防后退和刷新

Page_Load中加入

Response.Cache.SetNoStore();
 
//Session中存儲(chǔ)的變量“IsSubmit”是標(biāo)記是否提交成功的
if (!IsPostBack)
if (Session["IsSubmit"]==null)
Session.Add("IsSubmit",false);
if ((bool)Session["IsSubmit"])
 
{
 
//如果表單數(shù)據(jù)提交成功,就設(shè)“Session["IsSubmit"]”為false
 
Session["IsSubmit"] = false;
 
//顯示提交成功信息
 
TextBox1.Text = " * 提交成功!";
 
}
else
 
{//否則的話(沒有提交,或者是頁面刷新),不顯示任何信息
 
TextBox1.Text = "";
Response.End();
}

提交按鈕中加入

Session["IsSubmit"] = true;
Response.Redirect ("本頁");

? ?

另外:

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

2、要在頁面裝載事件寫上??? Response.CacheControl = "no-cache"???? 清除緩存

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


本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
Pi Node教學(xué):什麼是Pi節(jié)點(diǎn)?如何安裝和設(shè)定Pi Node? Pi Node教學(xué):什麼是Pi節(jié)點(diǎn)?如何安裝和設(shè)定Pi Node? Mar 05, 2025 pm 05:57 PM

PiNetwork節(jié)點(diǎn)詳解及安裝指南本文將詳細(xì)介紹PiNetwork生態(tài)系統(tǒng)中的關(guān)鍵角色——Pi節(jié)點(diǎn),並提供安裝和配置的完整步驟。 Pi節(jié)點(diǎn)在PiNetwork區(qū)塊鏈測試網(wǎng)推出後,成為眾多先鋒積極參與測試的重要環(huán)節(jié),為即將到來的主網(wǎng)發(fā)布做準(zhǔn)備。如果您還不了解PiNetwork,請參考Pi幣是什麼?上市價(jià)格多少? Pi用途、挖礦及安全性分析。什麼是PiNetwork? PiNetwork項(xiàng)目始於2019年,擁有其專屬加密貨幣Pi幣。該項(xiàng)目旨在創(chuàng)建一個(gè)人人可參與

nvm 怎麼刪除node nvm 怎麼刪除node Dec 29, 2022 am 10:07 AM

nvm刪除node的方法:1、下載「nvm-setup.zip」並將其安裝在C碟;2、設(shè)定環(huán)境變量,並透過「nvm -v」指令查看版本號;3、使用「nvm install」指令安裝node;4、透過「nvm uninstall」指令刪除已安裝的node即可。

node專案中如何使用express來處理檔案的上傳 node專案中如何使用express來處理檔案的上傳 Mar 28, 2023 pm 07:28 PM

怎麼處理文件上傳?以下這篇文章為大家介紹一下node專案中如何使用express來處理文件的上傳,希望對大家有幫助!

Node服務(wù)怎麼進(jìn)行Docker鏡像化?極致優(yōu)化詳解 Node服務(wù)怎麼進(jìn)行Docker鏡像化?極致優(yōu)化詳解 Oct 19, 2022 pm 07:38 PM

這段時(shí)間在開發(fā)一個(gè)騰訊文檔全品類通用的HTML 動(dòng)態(tài)服務(wù),為了方便各品類接入的生成與部署,也順應(yīng)上雲(yún)的趨勢,考慮使用Docker 的方式來固定服務(wù)內(nèi)容,統(tǒng)一進(jìn)行製品版本的管理。這篇文章就將我在服務(wù) Docker 化的過程中累積起來的優(yōu)化經(jīng)驗(yàn)分享出來,供大家參考。

聊聊用pkg將Node.js專案打包為執(zhí)行檔的方法 聊聊用pkg將Node.js專案打包為執(zhí)行檔的方法 Dec 02, 2022 pm 09:06 PM

如何用pkg打包nodejs可執(zhí)行檔?以下這篇文章跟大家介紹一下使用pkg將Node專案打包為執(zhí)行檔的方法,希望對大家有幫助!

深入淺析Node的進(jìn)程管理工具'pm2” 深入淺析Node的進(jìn)程管理工具'pm2” Apr 03, 2023 pm 06:02 PM

這篇文章跟大家分享Node的進(jìn)程管理工具“pm2”,聊聊為什麼需要pm2、安裝和使用pm2的方法,希望對大家有幫助!

使用Angular和Node進(jìn)行基於令牌的身份驗(yàn)證 使用Angular和Node進(jìn)行基於令牌的身份驗(yàn)證 Sep 01, 2023 pm 02:01 PM

身份驗(yàn)證是任何網(wǎng)路應(yīng)用程式中最重要的部分之一。本教程討論基於令牌的身份驗(yàn)證系統(tǒng)以及它們與傳統(tǒng)登入系統(tǒng)的差異。在本教程結(jié)束時(shí),您將看到一個(gè)用Angular和Node.js編寫的完整工作演示。傳統(tǒng)身份驗(yàn)證系統(tǒng)在繼續(xù)基於令牌的身份驗(yàn)證系統(tǒng)之前,讓我們先來看看傳統(tǒng)的身份驗(yàn)證系統(tǒng)。使用者在登入表單中提供使用者名稱和密碼,然後點(diǎn)擊登入。發(fā)出請求後,透過查詢資料庫在後端驗(yàn)證使用者。如果請求有效,則使用從資料庫中獲取的使用者資訊建立會(huì)話,然後在回應(yīng)頭中傳回會(huì)話訊息,以便將會(huì)話ID儲(chǔ)存在瀏覽器中。提供用於存取應(yīng)用程式中受

npm node gyp失敗怎麼辦 npm node gyp失敗怎麼辦 Dec 29, 2022 pm 02:42 PM

npm node gyp失敗是因?yàn)椤皀ode-gyp.js”跟“Node.js”版本不匹配,其解決辦法:1、透過“npm cache clean -f”清除node快取;2、透過“npm install -g n”安裝n模組;3、透過「n v12.21.0」指令安裝「node v12.21.0」版本即可。

See all articles