從ASP遷移至ASP+ --處理會(huì)話變量
發(fā)布時(shí)間:2008-05-12 閱讀數(shù): 次 來源:網(wǎng)樂原科技
現(xiàn)存的ASP版的eVille禁止對(duì)站點(diǎn)的某些部分的訪問,除非用戶已經(jīng)登錄。一些功能像查看將來的優(yōu)惠特價(jià),報(bào)名上課,以及了解自己當(dāng)前的入學(xué)狀況是受限制區(qū)域。如果想在未登錄的狀態(tài)下訪問這類區(qū)域,你只會(huì)被重新導(dǎo)回到登錄頁(yè)面。用戶在一份表格中輸入他們的用戶名與密碼,然后與數(shù)據(jù)庫(kù)的學(xué)生表進(jìn)行比較,如果登錄成功,一個(gè)名為blnLoggedIn的會(huì)話變量便被設(shè)為真。這種方法對(duì)這個(gè)站點(diǎn)是有效的,因?yàn)樗茉O(shè)在一臺(tái)單一的服務(wù)器上。其它的方法將被用于web farms上的web應(yīng)用程序,比如ASP+的會(huì)話存儲(chǔ),或SQL的會(huì)話存儲(chǔ)。
===確認(rèn)用戶輸入===
代碼重寫工作量最大的部分在于那些獲取用戶輸入的頁(yè)面,用戶輸入這些信息以登記成為eVille會(huì)員。有一個(gè)叫signup.asp的頁(yè)面,用來讓用戶輸入他們的重要信息,現(xiàn)有會(huì)員也可籍此更新信息。未轉(zhuǎn)換前,表格的數(shù)據(jù)通過HTTP Post方式遞交給一個(gè)叫cookie.asp的頁(yè)面。該頁(yè)會(huì)確認(rèn)表格中的數(shù)據(jù),如果存在錯(cuò)誤,將用戶導(dǎo)回signup.asp同時(shí)在query string中加上錯(cuò)誤號(hào)。接著一個(gè)Select Case語句會(huì)將基于錯(cuò)誤號(hào)的輸出進(jìn)行轉(zhuǎn)換。我們檢查的錯(cuò)誤包括:
*未輸入用戶名
*未輸入密碼
*密碼與密碼確認(rèn)不符
*用戶名在數(shù)據(jù)庫(kù)中已存在
通過將所有的輸入域(field)轉(zhuǎn)換成服務(wù)器控件,然后添加RequiredFieldValidators,可以輕松處理頭兩個(gè)可能發(fā)生的錯(cuò)誤。RequiredFieldValidator只須簡(jiǎn)單確認(rèn)經(jīng)ControlToValidate域鑒別后的服務(wù)器控件中有輸入值:
< tr>
< td valign="top">
< asp:RequiredFieldValidator runat=server
ControlToValidate = "txtUserName"
Display = "static"
errorMessage="< b>*< /b>"
ForeColor = "#CC3300" />
< /td>
< td valign=top>User Name:< /td>
< td valign=top>
< asp:TextBox id="txtUserName" size=25 runat=server />< /td>
< /tr>
這種方案是如此簡(jiǎn)單以至我們決定在把RequiredFieldValidator添加到所有的表格輸入域中。在ASP中,我們通常會(huì)用一個(gè)VBScript函數(shù)來檢驗(yàn)輸入值,而現(xiàn)在我們只需把RequiredFieldValidator添加到每個(gè)我們想確認(rèn)的控件中去。
至于密碼與密碼確認(rèn)的比較,我們可以使用ASP+的CompareValidator。該控件允許我們?cè)O(shè)置ControlToValidate,ControlToCompare以及Operator屬性(在本例中是一個(gè)等于號(hào),即'Equal')。被指定的兩個(gè)控件用Operator(即操作符)屬性互相比較。與傳統(tǒng)的If...Then語句相比,這種方法明顯要簡(jiǎn)單,快捷:
< asp:CompareValidator runat=server
ControlToValidate = "txtConfirm"
ControlToCompare = "txtPassword"
Type = "String"
Operator = "Equal"
Display = "dynamic"
errorMessage="< b>*< /b>"
ForeColor = "#CC3300" />
基于不同的瀏覽器,ASP+ validator控件會(huì)相應(yīng)執(zhí)行客戶端的JavaScript驗(yàn)證(針對(duì)IE4.0以上版本),或者執(zhí)行服務(wù)器端驗(yàn)證(針對(duì)其它情況)。不論驗(yàn)證是如何執(zhí)行的,服務(wù)器端的驗(yàn)證是必不可少的(以阻止某些淘氣的家伙在客戶端驗(yàn)證上耍花樣)。
現(xiàn)在輪到最后一個(gè)錯(cuò)誤了。假如提交的用戶名已經(jīng)存在,這就要求一點(diǎn)點(diǎn)頁(yè)面的改動(dòng)。到目前為止,我們已經(jīng)用可以執(zhí)行服務(wù)器端與客戶端驗(yàn)證代碼的服務(wù)器控件完成了所有的ASP+驗(yàn)證。至于最后這個(gè)錯(cuò)誤,我們要提供一些自定義的服務(wù)器端驗(yàn)證,因?yàn)槲覀冃枰L問數(shù)據(jù)庫(kù)以了解被請(qǐng)求的用戶名是否已存在。我們可以利用ASP+ CustomValidator控件來解決這一問題。