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

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

高級表單驗(yàn)證-針對多次提交表單

高級表單驗(yàn)證-針對多次提交表單

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

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

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

  通過表單重復(fù)發(fā)送數(shù)據(jù)是一個常見的情況,但是它會帶來問題。在理想的情況下,用戶在一個 Web 站點(diǎn)遇到一個表單,用正確的數(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)行一些校驗(yà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ù)。現(xiàn)在來看看執(zhí)行這一校驗(yàn)的代碼。建立表單并且校驗(yàn)已發(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 檢驗(yàn)隱含控制的值,并將其重定向到一個普通 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)實(shí)施了以上方法,你會發(fā)現(xiàn),只有當(dāng)你在瀏覽器的地址文本框內(nèi)鍵入URL來回到這個 表單時,此方法才奏效。它依靠的是瀏覽器的緩沖器機(jī)制。如果你使用back按鈕來返回頁,瀏覽器就檢測它的緩沖器來找到該頁的副本。它將使用緩存的頁而不是向服務(wù)器發(fā)出請求。所以服務(wù)器就 不能在session 變量submitted上進(jìn)行校驗(yàn)。為了避免這種情況,就要抑制瀏覽器的頁緩沖器。這通過在表單頁中處理Response對象來實(shí)現(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)前頁。在表單頁中,這些行必須要插入在所有代碼之前,因?yàn)樗齻兯玫男畔⒎胖迷贖TTP頭文件中,在所有輸出之前發(fā)送給瀏覽器。

多步驟表單

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

避免使用中間步驟表單

  為了避免這些問題,可以存儲當(dāng)前數(shù)據(jù)收集的狀態(tài)。這個狀態(tài)可以用一個session 變量來代表 來記錄是否執(zhí)行了一個特定的步驟---用戶是否填充了給出的表單。在一個多步驟表單中,每個表單都可以通過一個Boolean型的session變量來實(shí)現(xiàn)。如果有關(guān)表單沒有被處理,變量就為False ,反之就是True。下載部分的第二個例子顯示一個兩步驟表單:第一個表單要求用戶名,第二個表單顯示一個組合框,它的列表項(xiàng)要依賴第一個表單所提供的用戶名。第一個表單與一個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 ) 來校驗(yàn),以確定是否滿足了要求。事實(shí)上當(dāng)用戶要求第二個表單時校驗(yàn)requested1 變量。如果為True,就向?yàn)g覽器發(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 的校驗(yàn)必須要在〈 HTML 〉記錄之前進(jìn)行,這樣就允許可能的重定向。實(shí)際上,重定向是對瀏覽器的指示,它出現(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
国产精品日本一区二区三区在线| 欧美一卡二卡| 国产夫妻在线观看| 日韩不卡在线观看日韩不卡视频| 免费一级全黄少妇性色生活片| 久久久伊人日本| 色国产综合视频| 奇米网一区二区| 欧美wwwwxxxx| 午夜影院观看视频免费| 成人亚洲一区二区| 国产精品9999久久久久仙踪林| 国产日韩欧美视频| 91啪国产在线| 日日骚av一区二区| 亚洲欧美电影一区二区| www.xxxx欧美| 又紧又大又爽精品一区二区| 中文字幕一区二区人妻| 久久丫精品国产亚洲av不卡| 国产精品爽爽ⅴa在线观看| 欧美成人亚洲成人日韩成人| eeuss鲁片一区| 亚洲激情一区二区三区| 天天操天天干天天摸| 中文字幕日韩第一页| 成人亚洲欧美| 欧美精品视频www在线观看| 亚洲精品二区| 欧美日韩在线观看视频小说| 成年人视频免费在线播放| 激情久久av一区av二区av三区| 精品亚洲永久免费| 亚洲天堂avav| 人人澡人人透人人爽| 一区二区三区成人精品| 国产亚洲综合av| 欧美视频亚洲色图| 欧美性猛交xxxxxxxx| 91成人免费电影| 日韩三级在线| 国产av麻豆mag剧集| 成人国产免费视频| 欧美一级片中文字幕| a级毛片免费| 在线免费观看一区| 欧美最新精品| 三上悠亚ssⅰn939无码播放| 日本一区二区在线不卡| 熟女高潮一区二区三区| 天天精品视频| 日韩欧美国产片| 国内精品久久久久久久影视蜜臀| 中文字幕视频一区二区在线有码| 国产激情美女久久久久久吹潮| 亚洲一区日韩精品| 在线中文字幕网站| ts人妖交友网站| 小早川怜子痴女在线精品视频| 亚洲一区二区三区中文字幕在线观看| 麻豆久久久9性大片| 免费三片60分钟| 精品国产_亚洲人成在线| 紧身裙女教师波多野结衣| 日本一区二区三区四区五区| 久久精品视频在线看| 一级成人黄色片| 日韩成人在线视频| 国产精品国产三级国产普通话对白| 国产96在线 | 亚洲| 九九在线精品| 91在线无精精品白丝| 日韩欧美精品一区二区| 精品视频一区二区三区| 日韩av在线网| 国产九色porn网址| 国产精品果冻传媒| 99久久综合色| 欧美美女网站色| 亚洲第一偷拍| 亚洲人成人77777线观看| 在线电影看在线一区二区三区| 制服 丝袜 综合 日韩 欧美| 亚洲av成人精品日韩在线播放| 国产乱码久久久久久| 欧美色图亚洲天堂| 在线观看亚洲精品| 影音先锋欧美在线| 亚洲 欧美 激情 另类| 国产精品成人无码| 在线电影福利片| 日韩国产成人| 91视频成人免费| 欧美人动性xxxxz0oz| 97中文在线| www.日本三级| 精品影院一区| 97久久综合区小说区图片区| 中文字幕在线观看日韩| www成人在线视频| 久久久久国产精品一区| 蜜臀精品一区二区三区在线观看| 大胆欧美熟妇xx| 日本高清成人vr专区| 91青青草免费在线看| 加勒比在线日本| 久久精品视频亚洲| av黄色在线免费观看| 亚洲福利一区二区| 人妻久久久一区二区三区| 无码人妻av免费一区二区三区| 日韩成人免费观看| 国产在线视频资源| 欧美精品粉嫩高潮一区二区| www.污污视频| 菠萝蜜视频在线观看一区| 在线播放麻豆| 久久国产精品露脸对白| 岛国视频一区| 亚洲va欧美va国产综合剧情| 在线播放你懂得| 国产精品久久久久久久岛一牛影视| 色尼玛亚洲综合影院| 操欧美老女人| www.日本精品| 欧美一区二区三区另类| 亚洲精品91| 国产91在线视频蝌蚪| 午夜久久久久久久久久影院| 91蝌蚪porny九色| 五月久久久综合一区二区小说| 9人人澡人人爽人人精品| 欧美偷拍第一页| 欧美日韩一区二区免费在线观看| 无码精品人妻一区二区三区影院| 久久久久国产精品免费免费搜索| 美国精品一区二区| 99视频免费观看| 欧美精品videosex极品1| 国产一区二区三区精品视频| 国产大片中文字幕在线观看| 黄色小视频在线观看| 国产精品xxxxxx| 欧美xxxx黑人xyx性爽| 亚洲第一区第二区第三区| 国产高清视频免费最新在线| 99热精品在线观看| 黄色一级视频网站| 在线成人一区| 丰满熟女人妻一区二区三| 国产精品久久久久aaaa樱花| 成年网站在线视频网站| 久久精品一区二区| 久久久av电影| 亚洲永久免费网站| 亚洲精品一线二线三线无人区| 中国特黄一级片| 爱福利一区二区| 影音av资源站| 麻豆一区产品精品蜜桃的特点| 国产精久久一区二区三区| 国产黑丝一区二区| 久久久久久久久久久久av| 欧美男男gaytwinkfreevideos| 中文字幕99页| 午夜精品一区二区三区视频免费看| 不卡一区二区三区四区五区| 精品久久久亚洲| 国产视频亚洲视频| 精品国免费一区二区三区| 77777少妇光屁股久久一区| 青青草华人在线视频| 国产乱妇无码大片在线观看| 成人97在线观看视频| 香港三级经典全部种子下载| 99久久99热这里只有精品| 91九色综合| 欧美色图久久| 2018中文字幕在线| 2019中文在线观看| 色拍拍在线精品视频8848| 国产精品一级在线| 精品欧美一区二区精品久久| 欧美变态tickling挠脚心| 日本一区二区免费在线| **孕交吃奶水一级毛片| 精品亚洲一区二区三区四区五区| 久久久久久久亚洲| 欧美亚洲免费在线一区| 欧美激情在线狂野欧美精品| 欧美激情影院| 91在线看片| 粉嫩av在线播放| 久久久久久久久久91| 99re6在线精品视频免费播放| 日本成人精品在线| 哺乳一区二区三区中文视频| 免费看污污网站| 91麻豆123| 日韩黄色成人| 黄色网页网址在线免费| 99久久精品99国产精品| 国产精品videosex性欧美| 九色porny自拍视频在线播放| 久草国产在线视频| 国产精品igao视频网网址不卡日韩| 亚洲婷婷国产精品电影人久久| 在线视频精品一区| 国产精品久久久久久久久久齐齐| 日韩精品一区二区三区免费视频| 99热最新网址| 亚洲第一av色| 一个人免费播放在线视频看片| 中文字幕乱伦视频| 亚洲精选免费视频| 亚洲成av人**亚洲成av**| 北条麻妃国产九九九精品小说| 欧美国产日产图区| 国产jizzjizz一区二区| 久久先锋影音av鲁色资源网| 欧美精品一区二区在线观看| 自拍一级黄色片| 精品午夜一区二区三区在线观看| 欧美高清一级片在线| 精品一区二区成人免费视频| 久久久亚洲欧洲日产| 亚洲精品国产嫩草在线观看| 欧美性生交xxxxx久久久| 亚洲一区二区三区免费视频| 国产精品人人妻人人爽| www.97视频| 黄色成人羞羞视频| 99久久亚洲精品| 国外av网站| 欧美日中文字幕| 99在线观看免费视频精品观看| 一二三四日本中文字幕| 日本三级日本三级日本三级极| 黄色欧美视频| 360天大佬第二季在线观看| 日韩avxxx| 希岛爱理中文字幕| 欧美日韩激情视频一区二区三区| 国产精品第5页| 男女黄床上色视频| 久久机热这里只有精品| 国产69精品久久久久9999人| 成人一区二区不卡免费| 看成年女人免费午夜视频| 亚洲一卡二卡三卡四卡五卡| 欧美激情高清视频| 久久精精品视频| 色综合久久久久综合一本到桃花网| 91嫩草精品| 免费高清视频日韩| 久久精品视频一区| 午夜精品一区二区三区四区| 国产一卡二卡在线播放| 成人午夜精品久久久久久久蜜臀| 中文在线免费视频| 免费观看四虎精品成人| 久久久久久久久久久影院| 99青春婷婷视频| 欧美日韩三区四区| 中文字幕一区二区三区在线不卡| 国产精品免费福利| 欧美精品99久久久**| 67194成人在线观看| 日韩中文字幕电影| 中文字幕人妻熟女人妻洋洋| 91九色在线观看视频| 欧美一区二区三区四区夜夜大片| 国产黄色在线播放| 欧美成人国产精品高潮| 国产在线www| 97福利网站在线观看视频| 午夜美女福利视频| 日日摸夜夜添夜夜添精品视频| 欧美日韩第一视频| 男女激情片在线观看| 中文字幕国产欧美| 国产精品国产三级国产aⅴ入口| 欧日韩不卡视频| 国产精品久久久久一区二区三区共| 污视频在线观看免费| 西西人体44www大胆无码| 日本在线播放一区| 日韩久久久久久久久久久久| 亚洲精品中文综合第一页| 国产亚洲精品久久| av黄色免费在线| 色综合天天综合网中文字幕| 久久精品国产亚洲av无码娇色| 黄色av免费观看| 欧美黄色性生活| 中文字幕视频在线免费欧美日韩综合在线看| 美女免费黄视频网站| 亚洲一区二区视频在线| 女海盗2成人h版中文字幕| 99视频免费观看蜜桃视频| 中文字幕 亚洲一区| 亚洲视频在线免费播放| 日本中文字幕在线视频观看| 538任你躁在线精品免费| 欧美13videosex性极品| 日韩和欧美的一区二区| 大胆亚洲人体视频| 国产亚洲a∨片在线观看| 日本丰满少妇黄大片在线观看| 在线播放亚洲激情| 日韩三级视频在线观看| av毛片精品| 欧美精品一区在线观看| 国产精品最新乱视频二区| 酒色婷婷桃色成人免费av网| 亚洲欧洲无码一区二区三区| 久久的精品视频| 久久99久国产精品黄毛片色诱| 国产自产视频一区二区三区| 国产娇喘精品一区二区三区图片| 亚洲乱码日产精品bd在线观看| 成年人在线观看视频免费| 亚洲综合激情六月婷婷在线观看| 你懂得视频网站| 精品久久久久久久久久久久| 美丽的姑娘在线观看免费动漫| 9191精品国产综合久久久久久| 中文字幕有码在线播放|