1.
membership簡(jiǎn)介2.
membership在sql server中的設(shè)置3.
配置web.config4.
創(chuàng)建用戶CreateUserWizard控件5.
用戶登錄login控件6.
顯示當(dāng)前用戶的名稱LoginName控件7.
檢測(cè)用戶的身份驗(yàn)證狀態(tài)的LoginStatus控件8.
為不同類別用戶呈現(xiàn)不同內(nèi)容的LoginView控件9.
更改密碼的ChangePassword控件10.
自助找回密碼的PasswordRecovery控件11.
總結(jié)1.membership簡(jiǎn)介membership,真的很有趣,很方便,很有用。介紹給大家。
在 ASP.NET 應(yīng)用程序中,Membership 類用于驗(yàn)證用戶憑據(jù)并管理用戶設(shè)置(如密碼和電子郵件地址)。Membership 類可以獨(dú)自使用,或者與 FormsAuthentication 一起使用以創(chuàng)建一個(gè)完整的 Web 應(yīng)用程序或網(wǎng)站的用戶身份驗(yàn)證系統(tǒng)。Login 控件封裝了 Membership 類,從而提供一種便捷的用戶驗(yàn)證機(jī)制。
Membership 類提供的功能可用于:
1)創(chuàng)建新用戶。
2)將成員資格信息(用戶名、密碼、電子郵件地址及支持?jǐn)?shù)據(jù))存儲(chǔ)在 Microsoft SQL Server 或其他類似的數(shù)據(jù)存儲(chǔ)區(qū)。
3)對(duì)訪問網(wǎng)站的用戶進(jìn)行身份驗(yàn)證??梢砸跃幊谭绞綄?duì)用戶進(jìn)行身份驗(yàn)證,也可以使用 Login 控件創(chuàng)建一個(gè)只需很少代碼或無需代碼的完整的身份驗(yàn)證系統(tǒng)。
4)管理密碼。包括創(chuàng)建、更改、檢索和重置密碼等等??梢赃x擇配置 ASP.NET 成員資格以要求一個(gè)密碼提示問題及其答案來對(duì)忘記密碼的用戶的密碼重置和檢索請(qǐng)求進(jìn)行身份驗(yàn)證。
默認(rèn)情況下,ASP.NET 成員資格可支持所有 ASP.NET 應(yīng)用程序。默認(rèn)成員資格提供程序?yàn)?SqlMembershipProvider 并在計(jì)算機(jī)配置中以名稱 AspNetSqlProvider 指定。SqlMembershipProvider 的默認(rèn)實(shí)例配置為連接到 Microsoft SQL Server 的一個(gè)本地實(shí)例。
2.membership在sql server中的設(shè)置要使用membership,需要對(duì)數(shù)據(jù)庫進(jìn)行一些設(shè)置,使用過membership的朋友知道,數(shù)據(jù)庫中有一些固有的表、視圖和存儲(chǔ)過程,我們自己的表中沒有這些東西。
不過,我們可以通過向?qū)韯?chuàng)建它們,那就是aspnet_regsql.exe,一般來說它位于:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727(我的就在這里)
它既可以創(chuàng)建數(shù)據(jù)庫中的選項(xiàng),也可以移除這些設(shè)置。
在運(yùn)行這個(gè)程序之前,我在sql server2005中建立了一個(gè)空的數(shù)據(jù)庫:membershipdemo。
建立membershipdemo后,我們運(yùn)行aspnet_regsql.exe,指定membership為membershipdemo。
[attach]34768[/attach]
完成之后,空空的數(shù)據(jù)庫就有很多內(nèi)容了,不過具體的內(nèi)容暫時(shí)不必管。繼續(xù)后面的內(nèi)容。
[attach]34769[/attach]
3.配置web.configweb.config也是要修改的。
在system.web節(jié)點(diǎn)下添加authentication節(jié)點(diǎn)
membership既然是用于成員資格管理,當(dāng)然要求登錄驗(yàn)證身份,所以首先加上一個(gè)forms驗(yàn)證。
<authentication mode="Forms">
<forms loginUrl="login.aspx" name=".aspxlogin"/>
</authentication>
同樣在system.web節(jié)點(diǎn)下添加membership節(jié)點(diǎn)
<membership defaultProvider="AspNetSqlMembershipProvider" userIsOnlineTimeWindow="15" hashAlgorithmType="">
<providers>
<clear/>
<add connectionStringName="ConnectionString" enablePasswordRetri="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</membership>
屬性解釋說明:
defaultProvider:提供程序的名稱。默認(rèn)為 AspNetSqlMembershipProvi
der。如果你有多個(gè)Provider的話,指定一個(gè)默認(rèn)值是明智的做法
userIsOnlineTimeWindow:指定用戶在最近一次活動(dòng)的日期/時(shí)間戳之后被視為聯(lián)機(jī)的分鐘數(shù)。
hashAlgorithmType:用于哈希密碼的算法的標(biāo)識(shí)符,或?yàn)榭找允褂媚J(rèn)哈希算法。
connectionStringName:membership數(shù)據(jù)庫的連接名稱。
enablePasswordRetri:指示當(dāng)前成員資格提供程序是否配置為允許用戶檢索其密碼。
enablePasswordReset:指示當(dāng)前成員資格提供程序是否配置為允許用戶重置其密碼。
requiresQuestionAndAnswer:指示默認(rèn)成員資格提供程序是否要求用戶在進(jìn)行密碼重置和檢索時(shí)回答密碼提示問題。
applicationName:應(yīng)用程序的名稱。
requiresUniqueEmail:指示成員資格提供程序是否配置為要求每個(gè)用戶名具有唯一的電子郵件地址。
passwordFormat:指示在成員資格數(shù)據(jù)存儲(chǔ)區(qū)中存儲(chǔ)密碼的格式。值可選Clear、Encrypted 和 Hashed。Clear 密碼以明文形式存儲(chǔ),這可以提高存儲(chǔ)和檢索密碼的性能,但安全性較差,當(dāng)數(shù)據(jù)源安全性受到威脅時(shí)此類密碼很容易被讀取。Encrypted 密碼在存儲(chǔ)時(shí)進(jìn)行了加密,可以在比較或檢索密碼時(shí)進(jìn)行解密。此類密碼在存儲(chǔ)和檢索時(shí)需要進(jìn)行額外的處理,但比較安全,在數(shù)據(jù)源的安全性受到威脅時(shí)不容易被獲取。Hashed 密碼在存儲(chǔ)到數(shù)據(jù)庫時(shí)使用單向哈希算法和隨機(jī)生成的 salt 值進(jìn)行哈希處理。在驗(yàn)證某一密碼時(shí),將用數(shù)據(jù)庫中的 salt 值對(duì)該密碼進(jìn)行哈希計(jì)算以進(jìn)行驗(yàn)證。無法檢索哈希密碼。
maxInvalidPasswordAttempts:鎖定成員資格用戶前允許的無效密碼或無效密碼提示問題答案嘗試次數(shù)。
minRequiredPasswordLength:密碼所要求的最小長度。
minRequiredNonalphanumericCharacters:有效密碼中必須包含的最少特殊字符數(shù)。
passwordAttemptWindow:在鎖定成員資格用戶之前允許的最大無效密碼或無效密碼提示問題答案嘗試次數(shù)的分鐘數(shù)。這是為了防止不明來源反復(fù)嘗試來猜測(cè)成員資格用戶的密碼或密碼提示問題答案的額外措施。
passwordStrengthRegularExpression:計(jì)算密碼的正則表達(dá)式。
為membership配置web.config后,再配置其角色管理roleManager
也是在system.web下
<roleManager enabled="true" cacheRolesInCookie="true">
<providers>
<clear/>
<add connectionStringName="ConnectionString" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>
屬性解釋說明:
cacheRolesInCookie:指示當(dāng)前用戶的角色是否已緩存在某個(gè) Cookie 中。
當(dāng) CacheRolesInCookie 屬性在配置文件中設(shè)置為 true 時(shí),每個(gè)用戶的角色信息就會(huì)存儲(chǔ)在客戶端上的某個(gè) Cookie 中。當(dāng)角色管理檢查確定某個(gè)用戶是否屬于某個(gè)特定角色時(shí),在調(diào)用角色提供程序在數(shù)據(jù)源中檢查角色列表之前,將先檢查角色 Cookie。該 Cookie 在客戶端上會(huì)動(dòng)態(tài)更新以緩存最近已驗(yàn)證的角色名稱。
web.config就配置差不多了。
真正步入正題。
4.創(chuàng)建用戶CreateUserWizard控件
在vs2005中創(chuàng)建一個(gè)aspx頁面,取名CreateUserWizard.aspx。
直接從toolbox中拖入一個(gè)CreateUserWizard控件,設(shè)置一下FinishDestinationPageUrl屬性,該屬性指示用戶創(chuàng)建完成后,用戶點(diǎn)擊“繼續(xù)”后定向的頁面。
<asp:CreateUserWizard ID="CreateUserWizard1" runat="server" ContinueDestinationPageUrl="~/Default.aspx">
</asp:CreateUserWizard>
現(xiàn)在不做任何設(shè)置,在vs2005的中design視圖中可以看到
測(cè)試一下先!
提交,出現(xiàn)下面結(jié)果:
[attach]34772[/attach]
所以,正確設(shè)置membership后,注冊(cè)用戶就立馬可以使用了。
這CreateUserWizard的默認(rèn)模板
你也可以自己創(chuàng)建你需要的模板
vs2005可以幫你轉(zhuǎn)換出來
你可以修改一下,轉(zhuǎn)換后就是這樣
代碼會(huì)很多
5.用戶登錄login控件
CreateUserWizard可以直接拖出來用,login控件也是一樣。
在頁面中放入一個(gè)login,代碼很簡(jiǎn)單
CODE:
<asp:Login ID="Login1" runat="server" DestinationPageUrl="~/admin/Default.aspx" PasswordRecoveryText="找回密碼" PasswordRecoveryUrl="PasswordRecovery.aspx">
</asp:Login>
屬性解釋:
DestinationPageUrl:設(shè)置在登錄嘗試成功時(shí)向用戶顯示的頁面的 URL。
PasswordRecoveryText:設(shè)置密碼恢復(fù)頁鏈接的文本。
PasswordRecoveryUrl:設(shè)置密碼恢復(fù)頁的 URL。如果用戶忘記密碼,可以點(diǎn)擊這個(gè)鏈接點(diǎn)找回他的密碼。
同樣,你也可以自寫模板。
這次先不忙測(cè)試。
等一下后面的控件!
6.顯示當(dāng)前用戶的名稱LoginName控件
這個(gè)控件很簡(jiǎn)單,就是用來呈現(xiàn)用戶名的。
<asp:LoginName ID="LoginName1" runat="server" FormatString="您好,{0},您目前的身份是:注冊(cè)用戶" />
如果當(dāng)前登錄的是blueidea,那么顯示的就是“您好,blueidea,您目前的身份是:注冊(cè)用戶”。
7.檢測(cè)用戶的身份驗(yàn)證狀態(tài)的LoginStatus控件
可以說是最簡(jiǎn)單的控件了。
<asp:LoginStatus ID="LoginStatus1" runat="server" />
它包含兩種狀態(tài):
1)已登錄到網(wǎng)站。
2)已從網(wǎng)站注銷。
當(dāng)用戶注銷后,會(huì)給出一個(gè)“登錄”的鏈接,用戶可以點(diǎn)擊這個(gè)鏈接來登錄;當(dāng)用戶登錄后,這個(gè)控件會(huì)自動(dòng)轉(zhuǎn)變?yōu)?#8220;注銷”狀態(tài)。
8.為不同類別用戶呈現(xiàn)不同內(nèi)容的LoginView控件
全部登錄控件都可以直接拿來用,不過,這一個(gè)我們來做更多一些東西。
<asp:LoginView ID="LoginView1" runat="server">
<LoggedInTemplate>
<asp:LoginName ID="LoginName1" runat="server" FormatString="您好,{0},您已經(jīng)登錄了。" />
</LoggedInTemplate>
<AnonymousTemplate>
<asp:Label ID="Label2" runat="server" Text="您尚未登錄,請(qǐng)"></asp:Label><asp:LoginStatus
ID="LoginStatus1" runat="server" />
</AnonymousTemplate>
<RoleGroups>
<asp:RoleGroup Roles="admin">
<ContentTemplate>
<asp:LoginName ID="LoginName1" runat="server" FormatString="您好,{0},您目前的身份是:管理員" />
<br />
您可以訪問:<asp:HyperLink ID="HyperLink1" NavigateUrl="User/Default.aspx" runat="server">User/Default.aspx</asp:HyperLink>
<br />
您也可以訪問:<asp:HyperLink ID="HyperLink2" NavigateUrl="Admin/Default.aspx" runat="server">Admin/Default.aspx</asp:HyperLink>
<br />