建立一個使用.Net 2.0 MemberShip功能的標準例程——配置篇
具體配置如下
1 配置數據庫
運行 /WINDOWS/Microsoft.NET/Framework/v2.0.50727 下的Aspnet_regsql.exe
隨後 嚮導便在SQL Server中建立了對應的表。
這些表就是.Net 2.0 默認Provider對應的表,如果你在建立一個新項目 就沒必要在自己寫煩人的登陸了,這些表和它們所支持默認Provider的已經涵蓋了很多高級功能,包括cookie的支持、跨網站跨進程的登陸、找回密碼、郵箱認證等功能,當然我們也可以擴展它們。
相對的 我們還需要在web.config 建立這個數據連接字符串(<configuration >段中)
<connectionStrings>
<add name="MemberShip_Connection" connectionString="Data Source=.;Initial Catalog=MemberShip_Demo;Persist Security Info=True;User ID=sa;Password=abcdefg" providerName="System.Data.SqlClient"/>
</connectionStrings>
這樣數據庫的配置就已經完成了,我愛廚房怎麼說來着?陰乾待用。
2 配置驗證類型
一個asp.net缺省的身份驗證是windows nt 登陸。如果我們要自己來處理驗證信息就要在 <configuration >下面的<system.web> 段加入節點通知系統。
<authentication mode="Forms">
<forms loginUrl="~/Membership/authing/Login.aspx" timeout="30000">
</forms>
</authentication>
mode=forms 表示我不要用默認的windows NT 權限設置、而用我們配置的這種自定義的 面向網頁界面的驗證方式。
loginUrl 表示如果訪問某頁需要驗證的話 跳轉到哪一個(一般是有Login控件的)地址來進行登陸。登陸完畢,會直接跳回剛纔的頁面。
3 配置各種Provider
Provider對於Membership的感覺有點像 DataAdapter對於Dataset的感覺,都是可選擇的配件,你配置了不同的Provider 就有不同的用戶數據庫可以訪問
目前Provider 默認提供兩種官方Provider: SQL Provider & ADSI Provider
前者通過SqlServer數據庫保存 後者直接連結windows域的adsi服務
例如
<membership defaultProvider="Main_SqlMemberShipProvider" userIsOnlineTimeWindow="20">
<providers>
<add connectionStringName="MemberShip_Connection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" passwordFormat="Hashed" applicationName="DEMO_Membership" name="Main_SqlMemberShipProvider" type="System.Web.Security.SqlMembershipProvider"/>
</providers>
</membership>
這個例子表示 我要用MemberShip_Connection這個連接字符串連接數據庫(我們陰乾待用的部分)
用戶不能找回密碼但是可以重新設置密碼,找回的時候需要密碼提示問題,儲存在數據庫中的密碼用sha1進行加密 等等細節問題。 對於公用的Membership數據庫 區別名爲 DEMO_Membership .
Type是重要的選項 這決定你使用哪一個符合接口的具體的類型來擔任Provider 項 如果你使用自己的Provider 可以把DLL作爲引用添加在bin目錄後 在這裏填寫詳細的命名空間信息 比如“"System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089” 之類的東西 這裏不作贅述
這時候 我們已經可以通過控件進行申請和登陸了 你所需要做的只是把控件拖到指定的頁面上 然後test 也可以通過網站菜單下的管理工具進行修改
有些選項可能進不去 但是用戶的刪除和修改都可以嘗試使用了。 我們只需要進一步配置 更多的功能就向我們敞開大門了~~~
同樣我們配置Roles 和 Profile 的Provider
<roleManager enabled="true" cacheRolesInCookie="true" cookieName=".ASPROLES" cookieRequireSSL="true" defaultProvider="SqlRoleProvider">
<providers>
<add connectionStringName="MemberShip_Connection" applicationName="DEMO_Membership" name="SqlRoleProvider" type="System.Web.Security.SqlRoleProvider"/>
</providers>
</roleManager>
<profile enabled="true" defaultProvider="SqlProfileProvider">
<providers>
<add name="SqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="MemberShip_Connection" applicationName="DEMO_Membership" description="SqlProfileProvider for SampleApplication"/>
</providers>
<properties>
<add name="UserAge" type="System.String" defaultValue ="21"></add>
<add name="UserSex" type="System.String" defaultValue ="Male"></add>
</properties>
</profile>
經過編譯以後 你已經可以輕鬆的在你的頁面裏面訪問和設置你現在登陸的用戶的各種信息:
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim x As String = String.Empty
x = x & Membership.GetUser().UserName & ":"
x = x & Roles.GetRolesForUser(Membership.GetUser().UserName).Length & "個角色:"
x = x & "年齡" & Profile.UserAge
Button1.Text = x
End Sub
假如你沒有登陸 可能會得到一個對象引用錯誤 但是你作爲一個已知用戶登陸的話 運行結果大概是這樣
而剛纔提到的網站管理工具 已經基本可以正常工作了。
配置篇的例子到此完成 至於每一個參數什麼意義 MSDN上還是很全的。 如果查資料比較不方便 可以留言 我們一起討論
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.