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