韩剧1988免费观看全集_久久影视三级福利片_亚洲视频在线观看免费_在线观看欧美日韩_国产亚洲激情在线_亚洲精品美女久久久_欧美国产日韩一区二区在线观看_91在线观看免费高清完整版在线观看_日韩av免费看_国产又爽又黄的激情精品视频_琪琪亚洲精品午夜在线_欧美性猛xxx_不卡毛片在线看_国产亚洲日本欧美韩国_91国内在线视频_精品国产福利视频

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

高級表單驗證(轉(zhuǎn))-針對多次提交表單

高級表單驗證(轉(zhuǎn))-針對多次提交表單

更新時間:2021-01-01 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

每個開發(fā)人員面對的困難是預(yù)測用戶能夠或是將要做什么--這對于網(wǎng)絡(luò)開發(fā)人員來說就更為困 難,因為他的預(yù)測必須考慮到Web 的多樣性和缺乏真正的session控制機(jī)制。如果你已經(jīng)創(chuàng)建過一個使用表單的ASP應(yīng)用程序,也許你已經(jīng)遇到過一些奇怪的問題,如數(shù)據(jù)傳輸兩次,接收數(shù)據(jù)不完整,或者用戶報告表單顯示不正確。盡管你也插入了確認(rèn)數(shù)據(jù)所需的所有客戶機(jī)端和服務(wù)器端的腳本,表單仍然會發(fā)生許多異常情況。這些異常情況與意外用戶行為或瀏覽器書簽的誤使用有關(guān)。本文將集中解決一些容易引起表單問題的典型情況:用戶意外地重復(fù)發(fā)送數(shù)據(jù),在多步驟表單中直接使用中間表單。

數(shù)據(jù)復(fù)制

  通過表單重復(fù)發(fā)送數(shù)據(jù)是一個常見的情況,但是它會帶來問題。在理想的情況下,用戶在一個 Web 站點遇到一個表單,用正確的數(shù)據(jù)類型填充它,將它提交給處理數(shù)據(jù)的服務(wù)器,然后作為回應(yīng)發(fā)送給用戶一個確認(rèn)頁,這時用戶就可以再去做別的。如果用戶重新訪問前面那一頁,使用back 按鈕,然后無意中再將數(shù)據(jù)發(fā)送一次,那將會出現(xiàn)什么情形呢?如果你沒有預(yù)料到這一場景并且有所準(zhǔn)備,數(shù)據(jù)就將被重新傳送給服務(wù)器并且再處理一次。試想這些數(shù)據(jù)是一份訂單或旅館預(yù)約,那將會帶來很不愉快的結(jié)果。

終止重復(fù)數(shù)據(jù)傳輸

  為了避免那些錯誤地重復(fù)發(fā)送給服務(wù)器的數(shù)據(jù),可以在服務(wù)器側(cè)進(jìn)行一些校驗,來確定用戶能 意識到他們正在發(fā)送數(shù)據(jù)。這里使用的例子包含一個有單一文本框的簡單表單,表單接收一些文本,然后將其發(fā)送到一個顯示它們的ASP頁。 為確保用戶不將同樣的信息發(fā)送兩次,需要指示數(shù)據(jù)已經(jīng)被服務(wù)器接收到。存儲這些信息的最好的地方是一個session變量。定義一個session變量Session("submitted") ,當(dāng)用戶第一次到達(dá)這個表單時將它初始化為False,在用戶進(jìn)行最初的數(shù)據(jù)傳輸時將它設(shè)置為true 。如果用戶在當(dāng)前的session期間重新訪問這個表單,將出現(xiàn)相關(guān)重復(fù)提交信息。
所以用戶只能是在有意的情況下向服務(wù)器重復(fù)發(fā)送數(shù)據(jù),F(xiàn)在來看看執(zhí)行這一校驗的代碼。建立表單并且校驗已發(fā)送數(shù)據(jù)的ASP頁(在下載處為form.asp)有以下結(jié)構(gòu):
〈 HTML 〉
〈 HEAD 〉
〈 /HEAD 〉
〈 BODY 〉
〈 % If Session("submitted") Then % 〉
〈 !-- Code showing the warning message -- 〉
... 〈 % Else % 〉
〈 !-- Code showing the form -- 〉
... 〈 % End If % 〉
〈 /BODY 〉
〈 /HTML 〉

  表單和警告信息都是從同一個ASP頁創(chuàng)建的。表單包括標(biāo)準(zhǔn)的HTML代碼,引用ManageForm.asp頁作為它的ACTION 屬性:

〈 FORM METHOD="post" ACTION="ManageForm.asp" 〉
Send me some data:
〈 INPUT TYPE="text" NAME="data" 〉
〈 P 〉
〈 INPUT TYPE="submit" VALUE="Submit" 〉
〈 INPUT TYPE="reset" VALUE="Cancel" 〉
〈 /FORM 〉

ManageForm.asp 頁接收用戶發(fā)送的文本,顯示它并將session 變量submitted設(shè)置為True:
〈 HTML 〉
〈 HEAD 〉
〈 /HEAD 〉
〈 BODY 〉
You have sent the following information:
〈 P 〉
〈 %= Request("data") % 〉
〈 % Session("submitted") = True % 〉
〈 /BODY 〉
〈 /HTML 〉

  所以當(dāng)用戶又回到這個表單時,測試session 變量submitted,當(dāng)它的值為True時,發(fā)送給用 戶的是警告信息而不是輸入表單。這個警告信息是用HTML和客戶機(jī)側(cè)的JavaScript代碼組合編寫的:
〈 SCRIPT 〉
function SendAnswer(answer) { document.AnswerForm.answer.value = answer document.AnswerForm.submit() }
〈 /SCRIPT 〉
You have already submitted some information to this Web site.
〈 BR 〉 Do you want submit again?
〈 P 〉
〈 FORM NAME="AnswerForm" METHOD="post" ACTION="CheckAnswer.asp" 〉
〈 INPUT TYPE="button" VALUE="Yes" onClick="SendAnswer('Y')" 〉
〈 INPUT TYPE="button" VALUE="No" onClick="SendAnswer('N')" 〉
〈 INPUT TYPE="hidden" NAME="answer" VALUE="" 〉
〈 /FORM 〉

  表單包含兩個按鈕((Yes 和 No) 以及一個隱含控制域(answer) ,在其中保存用戶所選擇的值: Y 或 N。這個值由JavaScript 函數(shù)SendAnswer() 設(shè)置,這個函數(shù)還將它發(fā)送給CheckAnswer.asp 頁以執(zhí)行正確的重定向。如果用戶選擇了No按鈕,CheckAnswer.asp 檢驗隱含控制的值,并將其重定向到一個普通 welcome 頁,反之就將session 變量submitted設(shè)置為False 并再次將其重定向到表單頁。
〈 % If Request("answer") = "Y" Then Session("submitted") = False Response.Redirect "form.asp" Else Response.Redirect "welcome.htm" End If % 〉

控制瀏覽器緩沖器

  如果你已經(jīng)實施了以上方法,你會發(fā)現(xiàn),只有當(dāng)你在瀏覽器的地址文本框內(nèi)鍵入URL來回到這個 表單時,此方法才奏效。它依靠的是瀏覽器的緩沖器機(jī)制。如果你使用back按鈕來返回頁,瀏覽器就檢測它的緩沖器來找到該頁的副本。它將使用緩存的頁而不是向服務(wù)器發(fā)出請求。所以服務(wù)器就 不能在session 變量submitted上進(jìn)行校驗。為了避免這種情況,就要抑制瀏覽器的頁緩沖器。這通過在表單頁中處理Response對象來實現(xiàn)。取消頁緩沖器有多種方法。所有這些方法都要依靠HTTP頭文件中到瀏覽器的地址指示。但是所有瀏覽器對服務(wù)器發(fā)送的指示反應(yīng)不同,所以說最好能多發(fā)送一些指示來為更多的瀏覽器抑制緩沖器,按以下代碼所示:

〈 % Response.AddHeader "cache-control", "private" Response.AddHeader "pragma", "no-cache" Response.ExpiresAbsolute = #January 1, 1990 00:00:01# Response.Expires=0 % 〉

  以上代碼的頭兩行使用Response 對象的AddHeader 方法來將頭信息附加到HTTP頭文件中。 Expires 和 ExpiresAbsolute 屬性用瀏覽器緩沖器中頁的持續(xù)時間信息來標(biāo)記當(dāng)前頁。在表單頁中,這些行必須要插入在所有代碼之前,因為她們所引用的信息放置在HTTP頭文件中,在所有輸出之前發(fā)送給瀏覽器。

多步驟表單

  如果一個表單需要許多數(shù)據(jù),那么最好將你要求的數(shù)據(jù)劃分成多個小表單,這樣使用戶可以一步一步地填充表單,而不用等待表單加載許多HTML控制。另外還有一些情況,表單中的某些控制不完全必要,并且可以用已經(jīng)提交的數(shù)據(jù)逐行填充。使用多步驟表單允許顯示倚賴于用戶以前答案的定制表單。如果用戶在瀏覽器中將一個中間表單設(shè)置為書簽的話就會產(chǎn)生問題。在隨后的一個session中,用戶就試圖直接到達(dá)這個表單并提交數(shù)據(jù),這些數(shù)據(jù)已經(jīng)在上下文范圍之外,因為本來應(yīng)該在前面 表單收集的session 數(shù)據(jù)丟失了。

避免使用中間步驟表單

  為了避免這些問題,可以存儲當(dāng)前數(shù)據(jù)收集的狀態(tài)。這個狀態(tài)可以用一個session 變量來代表 來記錄是否執(zhí)行了一個特定的步驟---用戶是否填充了給出的表單。在一個多步驟表單中,每個表單都可以通過一個Boolean型的session變量來實現(xiàn)。如果有關(guān)表單沒有被處理,變量就為False ,反之就是True。下載部分的第二個例子顯示一個兩步驟表單:第一個表單要求用戶名,第二個表單顯示一個組合框,它的列表項要依賴第一個表單所提供的用戶名。第一個表單與一個session變量requested1相關(guān)聯(lián),你可以想象出來,第二個表單與變量requested2相關(guān)聯(lián)。當(dāng)用戶要求第一個表單(form1.asp) 時,session變量 requested1 被設(shè)置為 True :

〈 FORM METHOD="post" ACTION="form2.asp" 〉
Your name: 〈 INPUT TYPE="text" NAME="name" 〉
〈 P 〉
〈 INPUT TYPE="submit" VALUE="Submit" 〉
〈 INPUT TYPE="reset" VALUE="Cancel" 〉
〈 /FORM 〉
〈 % Session("requested1") = True % 〉

  這個值將由下一個表單( form2.asp ) 來校驗,以確定是否滿足了要求。事實上當(dāng)用戶要求第二個表單時校驗requested1 變量。如果為True,就向瀏覽器發(fā)送第二個表單并將requested2變量設(shè)置為True。如果為False 就意味著用戶想要直接使用第二個表單,于是瀏覽器就重定向到第一個表單。以下代碼是第二個表單的ASP頁:

〈 % If Session("requested1") Then % 〉
〈 HTML 〉
〈 HEAD 〉
〈 /HEAD 〉
〈 BODY 〉
〈 !-- Code for the second form -- 〉
... 〈 % Session("requested2") = True Else Response.Redirect "form1.asp" End If % 〉
〈 /BODY 〉
〈 /HTML 〉

  要注意對requested1 的校驗必須要在〈 HTML 〉記錄之前進(jìn)行,這樣就允許可能的重定向。實際上,重定向是對瀏覽器的指示,它出現(xiàn)在HTTP頭文件中,在所有的HTML代碼之前。

結(jié)論

  本文所示范的兩種技巧允許ASP開發(fā)人員對某些奇怪的情況有所控制,這些奇怪情況會造成用戶 通過一個Web 表單向服務(wù)器重復(fù)發(fā)送數(shù)據(jù)。每個技巧解決一個特定問題,所以最好將兩者混合使用,在ASP應(yīng)用程序每個表單中管理兩個session 變量。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
精品日韩av| 性欧美videohd高精| www成人在线观看| 日本黄色福利视频| 欧美福利一区| 任你操这里只有精品| 超碰在线成人| 强乱中文字幕av一区乱码| 欧美xxxxx牲另类人与| 亚洲中午字幕| 91看片在线免费观看| 9久久婷婷国产综合精品性色| 久久精品国亚洲| 亚洲乱码在线观看| 欧美亚洲国产日韩2020| 日本xxxxwwww| www.香蕉视频在线观看| 免费看欧美黑人毛片| www免费视频观看在线| 国产精品老牛| 天天看天天操| 亚洲成人一区二区在线观看| 欧美夜福利tv在线| 九九热精品在线| 亚洲精品男人的天堂| 永久av在线| 久久综合九色欧美综合狠狠| 91chinesevideo永久地址| 麻豆av电影| 亚洲国产1区| 欧美成人首页| 黄色污网站在线免费观看| 最新欧美人z0oozo0| 国产成人无码www免费视频播放| 天天久久综合| 亚洲欧美国产精品专区久久| 久久精品99久久久久久久久| 激情 小说 亚洲 图片: 伦| 日韩欧美一区二区三区久久婷婷| 亚洲国产精品欧美一二99| 色窝窝无码一区二区三区成人网站| 97成人在线| 在线欧美视频| 在线不卡免费欧美| 美女在线观看www| 午夜性色一区二区三区免费视频| 超碰97免费观看| 国产电影精品久久禁18| 亚洲a级在线播放观看| 亚洲欧洲在线观看| 伊人情人综合网| 成人av先锋影音| 成人一级片在线观看| 成人全视频免费观看在线看| 色综合色狠狠综合色| 天天做天天摸天天爽国产一区| 91高清视频免费观看| 中文字幕在线网| 亚洲超碰在线| 欧美日韩精品久久| 亚洲va韩国va欧美va| 丁香花在线观看完整版电影| 一区二区三区欧美激情| 久久久久成人精品免费播放动漫| 精品日韩电影| 秋霞蜜臀av久久电影网免费| 亚洲丝袜另类动漫二区| 肉色超薄丝袜脚交| av黄色免费| 在线观看的av| 欧美一级做一级爱a做片性| 91精品国产91久久久久久一区二区| wwwwxxxxx欧美| 星空影院最新电视剧免费观看| 亚洲av无日韩毛片久久| 五月天色网站| 日本欧美加勒比视频| 哥也色在线视频| 中文字幕免费观看| 国产女无套免费视频| 97公开免费视频| 亚洲精品一区中文字幕乱码| 奇米精品一区二区三区| 久久久国产精品x99av| 国产精品乡下勾搭老头1| 黄色成人在线网址| 日韩免费不卡av| 一区二区不卡在线| 在线看片第一页欧美| 久久精品久久久久久国产 免费| 亚洲最大成人在线观看| 亚洲成人免费在线视频| 日韩电影免费在线观看网站| 免费在线看成人av| 中文字幕欧美日本乱码一线二线| 一二三四在线观看视频韩国| 成人在线免费在线观看| 国产噜噜噜噜噜久久久久久久久| 中文字幕一区二区三区av| 欧美区一区二| 国产主播一区二区三区四区| 日本国产高清不卡| 亚洲精品7777xxxx青睐| www.日韩av.com| 国产精品vvv| 日韩欧美一级在线| 中文在线网在线中文| 久久综合一区二区三区| 国产一区二区精品久久91| 一级一级黄色片| 欧美大胆a级| 先锋av影院| 日本中文在线视频| 亚洲二区在线视频| 在线精品国产成人综合| 精精国产xxxx视频在线| 欧美成人网在线| 在线免费黄色av| 91大学生片黄在线观看| 国产成人精品久久二区二区91| 亚州av乱码久久精品蜜桃| 懂色av粉嫩av蜜臀av一区二区三区| 久久久国产综合精品女国产盗摄| 国产欧美日韩免费观看| 国产精品毛片一区二区| 国产91精品在线播放| 欧美日韩国产中文精品字幕自在自线| 色婷婷一区二区三区四区| 日本一区二区三区电影| 国产在线拍揄自揄拍视频| 亚洲精品乱码久久久久久蜜桃麻豆| 丝袜美腿精品国产二区| 国产精品亚洲аv天堂网| 婷婷精品在线观看| 日韩精品人妻中文字幕| 色婷婷一区二区三区四区| 涩爱av色老久久精品偷偷鲁| 国产精品视频中文字幕| 国产精品久久久久久久精| 国产极品嫩模在线观看91精品| 成人av电影免费观看| 少妇荡乳情欲办公室456视频| 欧美一区二区三区激情视频| 久久深夜福利| 波霸ol色综合网| 国产又黄又粗又长| 欧美高清视频在线观看mv| 在线视频1卡二卡三卡| 欧美xxxxxxxxx59| 日韩视频在线观看一区二区三区| 色综合一本到久久亚洲91| 热re91久久精品国99热蜜臀| 伊人午夜电影| 51午夜精品| a√在线中文网新版址在线| 日韩欧美在线视频日韩欧美在线视频| 先锋影视中文字幕| 亚洲综合色丁香婷婷六月图片| 亚洲av无码一区东京热久久| 婷婷综合电影| 在线永久免费观看黄网站| 国产深夜精品| 黑森林精品导航| 91gao视频| 四虎影视在线观看2413| 色综合久久88色综合天天| gogogo高清免费观看在线视频| 中文字幕日韩在线| 亚洲综合视频1区| 久久久久中文| 国产二区视频| 欧美三级网站在线观看| 中文字幕乱码人妻综合二区三区| 精品在线免费视频| 国产系列电影在线播放网址| 亚洲欧美综合图区| 亚洲精品少妇网址| 日本a视频在线观看| 天堂在线中文网官网| 国产精品一区二区在线观看不卡| 一本一道波多野结衣一区二区| 亚洲黄色小视频| 中文字幕视频一区| 免费中文字幕日韩| 精品制服美女丁香| 色哟哟日韩精品| 波多野结衣成人在线| 小早川怜子影音先锋在线观看| www.爱爱.com| 国产九色在线播放九色| 中文字字幕在线中文| 日本免费一二三区| 国模无码视频一区二区三区| 国产91免费观看| 欧美在线首页| 国产又粗又猛又色又| 国产精品成人一区二区三区电影毛片| 亚洲综合成人婷婷小说| 亚洲人精品一区| 中文幕无线码中文字蜜桃| 精品国产乱码久久久久久久软件| 人人干狠狠干| 午夜高潮免费视频| 三年片大全在线观看大全有哪些| 国产精品视频一区在线观看| 欧洲av无码放荡人妇网站| 亚洲成人午夜在线| 亚洲国产一区自拍| 精品久久久久久久无码| 精品久久久久久久久久久久包黑料| 婷婷夜色潮精品综合在线| 亚洲精品网站在线| 一区二区三区在线观看国产| 日本黄色播放器| 国产777精品精品热热热一区二区| 日韩精品视频在线观看网址| 成人精品动漫一区二区三区| 日韩欧美亚洲日产国| 伊人天天久久大香线蕉av色| 亚洲免费中文字幕| 99久久伊人久久99| 91精品国产99久久久久久| 亚洲精品视频网| 人人狠狠综合久久亚洲婷| 欧美艳星brazzers| 亚洲激情在线激情| 亚洲午夜精品久久久久久浪潮| 国产日产欧美一区二区三区| 青草青草久热精品视频在线网站| 国产精品人人做人人爽| 成人禁在线观看网站| 人人干人人视频| 亚洲精品国产精| 狠狠色狠色综合曰曰| 欧美日韩视频第一区| 国产成人黄色片| 久久久久国产美女免费网站| 天天综合网在线| 污污视频免费看| 日本一区二区不卡高清更新| bestiality新另类大全| 国产日韩精品在线观看| 亚洲成人生活片| 国产精品热久久久久夜色精品三区| 成年网站在线在免费播放| 欧美一区二区免费| 六月亚洲精品一区| 欧洲在线一区| 中文字幕在线免费看| 红桃视频在线观看一区二区| 国产福利片在线| av手机免费观看| 在线综合+亚洲+欧美中文字幕| 成人av集中营| 免费国产黄色网址| 国产又大又长又粗又黄| 国产精品1区在线| 成人一级毛片| 久久夜色精品国产欧美乱| 极品尤物一区二区| 国产又粗又长又硬| 久久久久国产一区二区三区四区| 久久青青草综合| 国产一区二区三区探花| 国产亚洲精品bv在线观看| 亚洲精品第一| 国产成人精品视频ⅴa片软件竹菊| 精品国产欧美一区二区五十路| 91麻豆产精品久久久久久| 一本久久精品一区二区| 国产亚洲人成a一在线v站| 欧美影院精品一区| 欧美日韩1区2区3区| 欧美色窝79yyyycom| 五月婷婷六月合| 蜜臀av在线| 国产天堂在线播放| 麻豆电影在线播放| 欧美一级做性受免费大片免费| 中文字幕视频一区二区在线有码| 四虎在线免费看| 国产99久久久久久免费看| 一女二男一黄一片| 91久久久久久久久久久久久久| 亚洲视频综合在线| 日韩黄色三级视频| 18禁网站免费无遮挡无码中文| 国产一区二区精品久久99| 美女福利一区二区| 潘金莲一级淫片aaaaaaa| 岛国毛片在线观看| 香蕉久久夜色精品国产使用方法| 亚洲青涩在线| 亚洲成av人片一区二区梦乃| 在线a视频网站| 18videosex性欧美麻豆| 国产成人精品一区二区三区视频| 一区二区日韩欧美| 国产美女高潮久久白浆| 欧美a级大片在线| 黑森林福利视频导航| 美女毛片一区二区三区四区最新中文字幕亚洲| 偷拍国模大尺度视频在线播放| 97在线视频免费观看| 亚洲成人av在线播放| 综合天堂av久久久久久久| 日本在线观看不卡| 欧美极品另类| 妖精视频一区二区三区| 国产白丝袜美女久久久久| 无码无套少妇毛多18pxxxx| 欧美日中文字幕| 国产老头老太做爰视频| 动漫黄在线观看| 亚洲最大福利视频网站| 色噜噜狠狠永久免费| 亚洲高清av一区二区三区| 欧美精品一区二区三区在线播放| 亚洲精品影院| 国产99久久久久久免费看农村| 国产又色又爽又黄刺激在线视频| 国产黑人绿帽在线第一区| 国产呦小j女精品视频| 亚洲免费在线精品一区| 中文字幕在线一区| 羞羞视频在线免费国产| 欧美专区一区| 91福利小视频|