Membership

MembershipASP.Net提供的用戶管理架構,和ASP.Net的安全模型結合的最好。能夠很好的實現權限驗證、權限組等。 Membership只是微軟提供的一些BLL,因此就能夠本身編寫MembershipProvider來調用API。html

Membership默認的AspNetSqlMembershipProvider是將數據存在SQLServer中,須要先把要使用的數據表建起來。(若是想存到Oracle數據庫中只要實現OracleMembershipProvider等便可。)步驟以下:web

1.運行C:\Windows\Microsoft.NET\Framework\v4.0.30319下aspnet_regsql.exe文件(個人Framework是4.0的,這裏只要找本身電腦上Framework的版本下的文件夾就能夠了),根據提示創建數據表。sql

2.配置web.config文件。數據庫

system.web節點下添加安全

 1     <membership defaultProvider="AspNetSqlMembershipProvider" userIsOnlineTimeWindow="15" hashAlgorithmType="">
 2       <providers>
 3         <clear/>
 4         <add connectionStringName="sqlconn" enablePasswordRetrieval="false" enablePasswordReset="true"
 5              requiresQuestionAndAnswer="false" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed"
 6              maxInvalidPasswordAttempts="5" minRequiredPasswordLength="1" minRequiredNonalphanumericCharacters="0"
 7              passwordAttemptWindow="10" passwordStrengthRegularExpression="" name="AspNetSqlMembershipProvider"
 8              type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
 9       </providers>
10     </membership>
11     <roleManager enabled="true" cacheRolesInCookie="true">
12       <providers>
13         <clear/>
14         <add connectionStringName="sqlconn" applicationName="/" name="AspNetSqlRoleProvider"
15              type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
16       </providers>
17     </roleManager>
connectionStringName="key"  (key是connectionStrings節點下鏈接數據庫的鏈接字符串的鍵)

enablePasswordRetrieval:是否容許找回密碼;服務器

enablePasswordReset:是否容許重置密碼:cookie

requiresQuestionAndAnswer:是否要求密碼問題、答案架構

requiresUniqueEmail:是否一個郵箱只能註冊一個帳戶。app

Membership驗證:ide

內網系統用Windows驗證,互聯網系統用Forms驗證。
這裏使用Form驗證:這裏須要在system.web節點下添加
1 <authentication mode="Forms">
2       <forms loginUrl="~/Login.aspx" name=".aspxlogin"></forms><!--loginUrl表示登錄的頁面-->
3 </authentication>

下面能夠直接調用微軟設計好的MembershipProvider。

首先創建一個註冊頁面,在頁面中添加CreateUserWizard控件

               

這裏就能夠經過註冊頁面進行註冊了,後臺無需任何代碼。

再創建一個登陸頁面Login.aspx,在頁面中添加Login控件。

後臺也無需任何代碼就能完成登錄,設置控件的屬性DestinationPageUrl來實現登錄成功後跳轉到目標頁面。

--------------------------------------------------------------上面是經過微軟提供的MembershipProvider來實現註冊登陸--------------------------------------------------------------------------

下面經過本身創建MembershipProvider來實現用戶的註冊和登陸

創建註冊頁面,這裏我使用的仍是服務器端控件,這裏就不使用純html標籤來實現了。頁面只是爲了實現具體功能,具體的頁面設計並未作什麼具體的美化和設計。

後臺代碼以下:

 1 protected void Button1_Click(object sender, EventArgs e)
 2         {
 3             MembershipCreateStatus status;
 4             MembershipUser user= Membership.CreateUser(txtName.Text, txtPwd.Text, txtEmail.Text, ddlQuestion.SelectedValue, txtAnswer.Text, true, out status);
 5             if (status == MembershipCreateStatus.Success)
 6             {
 7                 //成功
 8                 lblMsg.Text = "成功!";
 9             }
10             else if (status == MembershipCreateStatus.DuplicateEmail)
11             {
12                 //郵箱已存在
13                 lblMsg.Text = "郵箱已存在!";
14             }
15             else if(status==MembershipCreateStatus.DuplicateUserName)
16             {
17                //用戶名存在
18                lblMsg.Text = "用戶名存在!";
19             }
20            //這裏能夠經過判斷MembershipCreateStatus各個值去顯示個性化報錯信息,這裏就不全寫了。
21         }

這裏能夠經過判斷MembershipCreateStatus各個值去顯示個性化報錯信息。

創建登陸頁面:這裏依然使用服務器端控件來佈局登陸頁面。

這裏登陸成功後我並未作頁面跳轉,而是經過button來獲取用戶的信息。

登陸後臺代碼:

 1 protected void btnLog_Click(object sender, EventArgs e)
 2         {
 3             //驗證用戶名和密碼是否正確。
 4             bool isSign=Membership.ValidateUser(txtName.Text, txtPwd.Text);
 5             if (isSign)
 6             {
 7                 //設置當前登陸用戶的用戶名並記錄到一個持久的cookie中。
 8                 FormsAuthentication.SetAuthCookie(txtName.Text, true);
 9                 lblMsg.Text = "登陸成功!!";
10             }
11             else
12             {
13                 lblMsg.Text = "登陸失敗!!";
14             }
15         }

運行結果

獲取用戶信息後臺代碼:

 1  protected void btnGetUser_Click(object sender, EventArgs e)
 2         {
 3             MembershipUser user = Membership.GetUser();
 4             if (user==null)
 5             {
 6                 lblMsg.Text = "未登陸!!";
 7             }
 8             else
 9             {
10                 //user.ProviderUserKey爲主鍵。AspNetSqlMembershipProvider是使用Guid類型的主鍵
11                 lblMsg.Text = user.UserName + "----"+user.ProviderUserKey;
12             }
13         }

用戶登陸成功後獲取用戶信息結果以下:

註銷後臺代碼:

1  protected void btnCancel_Click(object sender, EventArgs e)
2         {
3             FormsAuthentication.SignOut();
4         }

註銷後獲取用戶信息結果:

相關文章
相關標籤/搜索