Membership是ASP.Net提供的用户管理架构,和ASP.Net的安全模型结合的最好。可以很好的实现权限验证、权限组等。 Membership只是微软提供的一些BLL,所以就可以自己编写MembershipProvider来调用API。
Membership默认的AspNetSqlMembershipProvider是将数据存在SQLServer中,需要先把要使用的数据表建起来。(如果想存到Oracle数据库中只要实现OracleMembershipProvider等即可。)步骤如下:
1.运行C:\Windows\Microsoft.NET\Framework\v4.0.30319下aspnet_regsql.exe文件(我的Framework是4.0的,这里只要找自己电脑上Framework的版本下的文件夹就可以了),根据提示建立数据表。
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:是否允许重置密码:
requiresQuestionAndAnswer:是否要求密码问题、答案
requiresUniqueEmail:是否一个邮箱只能注册一个账户。
Membership验证:
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 }
注销后获取用户信息结果: