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         }

注销后获取用户信息结果:

相关文章
相关标签/搜索