asp.net|控制項 asp.net 2.0中,新增了許多新的功能和控制項。其中,新增的登陸控制項可謂使得WEB應用的設計更加得心應手。什麼是登陸控制項呢?就是我們平常在WEB應用中經常要用到的使用者註冊,登陸,忘記密碼,登陸後根據許可權的不同而顯示不同的頁面等功能,現在在asp.net 2.0中都已經可以由提供的控制項來實現了。ASP.NET 2.0中的登陸控制項比較多,封裝了大部分WEB應用中要實現系統登陸的系列功能,涉及到很多方面,本文將簡單介紹一下它們的主要功能。
首先,asp.net 2.0中,為了更方便建立和系統管理使用者,以及對 Web 應用程式中的頁進行密碼保護,引進了新的架構membership。新的架構套件含用於處理身分識別驗證和授權的新增功能,能夠同時滿足 Web 網站管理員和開發人員的需要。Web 網站管理員可以利用新的 Web 網站管理工具來建立新的使用者和角色,以及控制對 Web 應用程式中頁面的訪問。Web 網站管理工具是一組預先編寫的 ASP.NET頁,不具備編程技巧的使用者可以使用它們來配置 Web 應用程式。利用membership API,編程人員可以很方便地使用拖拉控制項的方法,再加以少量的代碼,就可以完全實現對使用者,角色許可權等的管理,還可以自訂做擴充。
其中,membership架構中包含了兩個預設的使用者驗證程式:預設的 AccessMembershipProvider以及 SqlMembershipProvider。如果希望在 Microsoft SQL Server 資料庫中儲存成員資格資訊,則可以將應用程式配置為使用 SqlMembershipProvider,如果要使用access資料庫,則使用AccessMembershipProvider。還可以建立自訂成員資格提供者。例如,如果需要在 XML 檔案、或 Oracle 資料庫中儲存成員資格資訊,希望建立自己的成員資格提供者,則需要實現抽象類別MembershipProvider 的所有方法和屬性。本文中,將以access資料庫為例子做說明,所以使用Accessmembershipprovider。
我們可以使用asp.net 2.0內建的WEB網站安全組態工具,就可以無需編程,在系統嚮導的帶領下,自動建立一個儲存使用者角色身份的資料庫了。比如,我們現在需要建立一個access的資料庫,裡面儲存使用者名稱,密碼,密碼提示問題,使用者EMAIL等資料,則可以通過web網站安全組態工具來實現。步驟如下:
1)先使用visual studio express 2005建立一個WEB網站,命名為Dorknozzle,使用VB.NET語言,之後,我們點選Visual studio express中的WebSite菜單中的ASP.NET Configuration,這時會彈出一個新的頁面視窗,其中選擇Security選項,如下圖:
2) 從上圖可以看到,安全設定選項被分為三部分:使用者,角色和規則。由於我們是第一次配置,選擇“To configure security step by step, use the Security Setup Wizard”,在出現的介面點“NEXT”進入下一步。
在第二步中,你可以選擇驗證的類型,比如你的網站是發布在internet還是intranet,再點next進入下一步,系統會提示目前是使用AspnetAccessProvider ,繼續點下一步,系統會詢問是否建立基於角色的應用,如果應用中要用到角色,就必須將那個單選框打勾,本文不選擇該項,繼續下一步。
3) 此時,系統會詢問我們輸入建立使用者的資訊,如下圖,比如輸入使用者名稱,密碼,EMAIL等資訊。在輸入後,點NEXT進入下一步。
4)系統會允許你對某一使用者進行有關規則的詳細設定,比如允許某一使用者行駛或拒絕使用某角色等。本文將忽略不用,繼續選NEXT進下一步,此時,完成了系統的初步配置了。
此時,AccessMembershipProvider會自動在當前工程的data目錄下,建立一個AspNetDB的ACCESS資料檔案,開啟它,會發現自動產生了相關的表格,比如有aspnet_users表,存放使用者的基本資料,aspnet_membership表,存放使用者加密的密碼和其他資訊。
在進行完上面的步驟後,下面我們開始認識並使用asp.net 2.0中的登陸控制項。這些控制項在工具箱的Login選項組中,共有Login, LoginView, PasswordRecovery, LoginStatus, LoginName, CreateUserWizard, ChangePassword 共7個,下面逐一介紹:
Login控制項
拖拉一個Login控制項到表單中,就發現和平時見到的登陸視窗差不多了,在該控制項的屬性視窗中,比較重要的是DestinationPageUrl 屬性,該屬性將指定使用者在登陸後跳轉的頁面,而FailureText表示登陸失敗後提示的文本,CreateUserText表示建立新使用者的提示文本,PasswordRecoveryText表示提示密碼的文本,PasswordRecoveryUrl表示實現密碼提示恢複功能的連結,此外可以設定其很多屬性,比如顯示使用者名稱,密碼的文本,登陸按鈕PasswordRecoveryUrl的文本等,都十分簡單,大家可以去試一下,初步設定屬性後的登陸框如下圖:
Loginname和LoginStatus控制項
一般的登陸模組,當使用者在成功登陸後,會顯示使用者當前登陸的身份,比如“歡迎XXX使用者登陸”的提示,而同時會顯示“LOGOUT(退出)”的提示,這時,我們可以通過Loginname和loginstatus控制項來實現,在index.aspx頁中,加入
<form runat="server">
Welcome <asp:LoginName id="lnUser" runat="server"/>, your login was successful!<br /><br />
<asp:LoginStatus id="lsUSer" runat="server"/>
</form>
則當使用者登陸後,會顯示如下:
LoginView控制項
另一十分有用的控制項就是loginview。它會根據使用者角色的不同而顯示不同的登陸後的內容。比如,做為管理員在登陸後,希望能看到所有部門的人員資訊,而只希望某一部門的人員看到只屬於該部門的資訊,LoginView控制項可以做到這點。本文的例子中,希望系統顯示給匿名訪問者的資訊是希望他們註冊使用者,而對於已經登陸的使用者,則顯示歡迎他們再次訪問的文字。此時要用到Loginview控制項的AnonymousTemplate模版和LoggedInTemplate模版。AnonymousTemplate模版用於顯示給匿名使用者時的提示資訊,LoggedInTemplate模版用於顯示給已經登陸使用者的提示資訊,代碼如下:
<asp:LoginView id="lvDorknozzle" runat="server">
<LoggedInTemplate>
Welcome <asp:LoginName id="lnUser" runat="server"/>
</LoggedInTemplate>
<AnonymousTemplate>
Welcome to the Dorknozzle site!<br />
Please click on the New User link to register on our site.
</AnonymousTemplate>
</asp:LoginView>
運行如下圖:
CreateUserWizard控制項
使用該控制項,可以很方便地一步步引導使用者進行註冊。拖拉其到設計表單中,如下圖:
當然,你可以對其屬性進行更多地設定,比如,設定HeaderTemplate(頭模版),StartNavigationTemplate(開始註冊模版),FinishNavigationTemplate(結束註冊模版)等,具體設定可以參考線上協助。而該控制項還允許當註冊成功後向使用者發郵件,比如:
<asp:CreateUserWizard id="CreateUserWizard1" runat="server">
<MailDefinition
BodyFileName="NewUserEmail.txt"
From="welcome@dorknozzle.com"
Subject="Welcome to the Dorknozzle site!"/>
</asp:CreateUserWizard>
而發郵件則需要在web.config檔案中配置,比如:
<configuration>
<system.web>
<authentication mode="Forms"/>
<smtpMail serverName="Localhost"/>
</system.web>
</configuration>
PasswordRecovery密碼恢複控制項
該控制項可以實現簡單地密碼提示恢複功能,並將密碼email給使用者,代碼如下:
<asp:PasswordRecovery id="prForgotPass" runat="server"> </asp:PasswordRecovery>
實現時如下圖所示:
使用者輸入使用者名稱後,則需要輸入密碼恢複的答案,如下圖:
並在該控制項中設定將恢複後的密碼EMAIL給使用者
<asp:PasswordRecovery id="prForgotPass" runat="server">
<MailDefinition
BodyFileName="forgotpassword.txt"
From="helpdesk@dorknozzle.com"
Subject="Word has it, you forgot your password?"/>
</asp:PasswordRecovery>
ChangePassword 更改密碼控制項
更改密碼控制項可以很方便地實現密碼的更改,包括一個 MailDefinition 屬性。如果將值賦給 MailDefinition 屬性,則 ChangePassword 控制項在密碼成功更改時將自動向使用者發送一個電子郵件。
直接使用Membership API
有時候,需要對成員資格進行更進階別(比 Web 網站管理工具或 Login 控制項提供的控制層級高)的控制。在這些情況下,可以直接使用 Membership API。
Membership API 是通過 Membership 類公開的。Membership 類包含的方法使您能夠完成以下工作:建立新使用者;更改密碼;搜尋與特定條件匹配的使用者等等。在幕後,Login 控制項使用這些方法與已配置的成員資格提供者進行互動。
下面列出了 Membership 類的一些比較重要的方法:
CreateUser — 使您能夠建立新使用者。
DeleteUser — 使您能夠刪除現有使用者。
FindUsersByEmail — 使您能夠檢索與某個特定的電子郵件地址匹配的使用者集合。
FindUsersByName — 使您能夠檢索與某個特定的使用者名稱匹配的使用者集合。
GeneratePassword — 使您能夠產生隨機密碼。
GetAllUsers — 使您能夠檢索成員資格提供者中儲存的所有使用者。
GetNumberOfUsersOnline — 使您能夠返回當前正在訪問 Web 應用程式的使用者數。
GetUser — 使您能夠檢索與目前使用者相關聯的成員資格資訊,或者使您能夠檢索與某個已經提供使用者名稱的使用者相關聯的成員資格資訊。
GetUsernameByEmail — 使您能夠檢索具有某個特定電子郵件地址的使用者的使用者名稱。
UpdateUser — 使您能夠更新特定使用者的資訊。
ValidateUser — 使您能夠根據成員資格提供者對使用者進行身分識別驗證。
最後,我們利用該API,實現稍微複雜的功能。在index.aspx中,添加一個label控制項,顯示線上的人數,代碼如下:
Number of Users Online:
<asp:Label id="lblNumUsersOnline" runat="server"/>
在PAGE-LOAD事件中,增加代碼如下:
Sub Page_Load(s As Object, e As EventArgs) Handles MyBase.Load
lblNumUsersOnline.Text = _
Membership.GetNumberOfUsersOnline().ToString()
End Sub
則可以顯示線上人數。我們並且再添加一個gridview,顯示所有使用者的線上狀況,是否允許某種許可權和相關的資訊。
<asp:GridView id="gvUsers" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField HeaderText="Username" DataField="Username" />
<asp:BoundField HeaderText="Is Online?" DataField="IsOnline" />
<asp:BoundField HeaderText="Is Approved?" DataField="IsApproved" />
<asp:BoundField HeaderText="Email" DataField="Email" />
</Columns>
</asp:GridView>
並將gridview綁定:
gvUsers.DataSource = Membership.GetAllUsers() ;
gvUsers.DataBind();
最後運行結果如下圖:
總結: 本文以實際例子,介紹了asp.net 2.0中新增加的登陸系列控制項的簡單用法以及新增加的Membership API的簡單使用,更多的請參考MSDN或正式版時的有關介紹。