.Net Membership介绍

  在 ASP.NET 应用程序中,经常会用到创建用户名(注册),登录验证,权限管理等每次开发都必须做的事情,为了解决这一问题,微软在.Net 2.0提供了成员管理(MemberShip)这一API。Membership 类用于验证用户凭据并管理用户设置(如密码和电子邮件地址)。Membership 类可以独自使用,或者与 FormsAuthentication 一起使用以创建一个完整的 Web 应用程序或网站的用户身份验证系统。


      在这里我们把MemberShip所使用的数据库创建在MS SQLSERVER服务中(不是EXPRESS),我们需要在开始,运行对话框中输入以下文字:C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/aspnet_regsql.exe,根据提示,创建数据库。


     OK,数据库创建完成。接下来新建一个web应用程序,我们需要对Webconfig文件进行配置。


     在<system.web>节点下,创建membership和roleManager节点,具体如下:

      

[xhtml]  view plain copy
  1.   <membership>  
  2.     <providers>  
  3.       <clear/>  
  4.       <add name="AspNetSqlMembershipProvider"  
  5.           type="System.Web.Security.SqlMembershipProvider"  
  6.           connectionStringName="wish"  
  7.           enablePasswordRetrieval="false"  
  8.           enablePasswordReset="true"  
  9.           requiresQuestionAndAnswer="false"  
  10.           applicationName="/"  
  11.           requiresUniqueEmail="false"  
  12.           passwordFormat="Hashed"  
  13.           maxInvalidPasswordAttempts="5"  
  14.           minRequiredPasswordLength="6"  
  15.           minRequiredNonalphanumericCharacters="0"  
  16.           passwordAttemptWindow="10"  
  17.           passwordStrengthRegularExpression=""/>  
  18.       </providers>  
  19. </membership>  
  20.   <roleManager enabled="true" cacheRolesInCookie="true">  
  21.     <providers>  
  22.        <clear/>  
  23.        <add connectionStringName="wish" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider"/>  
  24.     </providers>  
  25.   </roleManager>  
 


       下面是主要的几个属性的含义:

    name:数据提供程序的名称,由于我们是从machine.config复制过来的,所以必须改名,防止重名

    type:数据提供程序类型,如果使用的是MSSQL数据库,则保持不变即可,如果使用的是Oracle等其他数据库,则必须自己创建一个类来继承MembershipProvider抽象基类,重写里边的所有抽象方法,然后把类型写在这里即可。

    connectionStringName:该属性必须指定在<connectionStrings>节点中,一个连接字符串的名字。

    applicationName:应用程序名称,membership允许多个应用程序共同使用一个数据库来管理自己的用户、角色信息,各应用程序只需配置不同的applicationName即可,当然,如果想要多个应用程序使用同一份用户角色信息,只需设置一样的applicationName即可。

    userIsOnlineTimeWindow:指定用户在最近一次活动的日期/时间戳之后被视为联机的分钟数。

    hashAlgorithmType:用于哈希密码的算法的标识符,或为空以使用默认哈希算法。

    enablePasswordRetrieval:指示当前成员资格提供程序是否配置为允许用户检索其密码。

    enablePasswordReset:指示当前成员资格提供程序是否配置为允许用户重置其密码。 

    requiresQuestionAndAnswer:指示默认成员资格提供程序是否要求用户在进行密码重置和检索时回答密码提示问题。

    requiresUniqueEmail:顾名思义,用户注册时,是否需要提供未注册过的邮箱。

    passwordFormat:密码存储格式,密码保存在数据库中的格式,最常用的有Clear(不加密)和Hashed(使用SHA1算法加密)

    minRequiredPasswordLength:最小密码长度。

    minRequiredNonalphanumericCharacters:指定有效密码中必须包含的特殊字符的最小数量,就是说不是字母也不是数字的字符的数量,比如+-*/,.什么的,增加密码强度

    passwordAttemptWindow:在锁定成员资格用户之前允许的最大无效密码或无效密码提示问题答案尝试次数的分钟数。这是为了 防止不明来源反复尝试来猜测成员资格用户的密码或密码提示问题答案的额外措施。

    passwordStrengthRegularExpression:计算密码的正则表达式。



OK,配置完成。

接下来我们需要创建两种角色,一个是admin,一个是employee。

最简单的方法:

在某个Page_Load的事件里写下以下代码(命名空间using System.Web.Security;),并且运行该页面.

[c-sharp] view plain copy
  1. protected void Page_Load(object sender, EventArgs e)  
  2. {  
  3.     Roles.CreateRole("admin");  
  4.     Roles.CreateRole("employee");  
  5. }  

运行完成,我们就添加了两种角色,可以在数据库的aspnet_Roles表中看到。


接下来我们需要注册用户,我们可以使用CreateUserWizard控件,拖拽一个到页面中就OK了。

或者你可以自己拖拽几个文本框,自己写代码,具体代码是这样的。


[c-sharp] view plain copy
  1. protected void btnReg_Click(object sender, EventArgs e)  
  2.     {  
  3.         //用户名是否存在  
  4.         if (Membership.FindUsersByName(txtUserName.Text).Count ==0)  
  5.         {  
  6.             //创建用户  
  7.             Membership.CreateUser(txtUserName.Text, txtPwd.Text, txtEmail.Text);  
  8.             //加入角色中  
  9.             Roles.AddUserToRole(txtUserName.Text, "employee");  
  10.             //跳转到welcome页面,此处需要配置webconfi下的authentication节点  
  11.             //<authentication mode="Forms" >  
  12.             //  <forms defaultUrl="welcome.aspx"  name="login" loginUrl="login.aspx" />  
  13.             //</authentication>  
  14.             FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, false);  
  15.         }  
  16. }  

用户创建完成以后,我们在网站中创建如admin和employee文件夹,并在各个中添加一个aspx页面:


下面就可以进行权限的配置了,具体配置如下,在根节点下添加。

[xhtml]  view plain copy
  1. <location path="admin">  
  2.   <system.web>  
  3.     <authorization>  
  4.       <allow roles="admin"/>  
  5.       <deny users="*"/>  
  6.     </authorization>  
  7.   </system.web>  
  8. </location>  
  9.   
  10. <location path="employee">  
  11.   <system.web>  
  12.     <authorization>  
  13.       <allow roles="employee"/>  
  14.       <deny users="*"/>  
  15.     </authorization>  
  16.   </system.web>  
  17. </location>  
 

说明:

allow:允许的角色

deny:拒绝的角色,*代表所有用户,?代表匿名用户。

path:可以对应具体的文件夹,也可以对应某一个文件,如path="admin.aspx";

OK,直接浏览admin或者employee下的文件,会发现会自动跳到我们在authentication节点下配置的Login页面,然后用我们刚才注册的登录,发现只能进入employee文件夹,admin即使登录也会跳转回来。

MemberShip提供了许多的API接口,我们打开数据库找到MemberShip的存储过程,发现很多存储过程的名称和我们的方法名相同,其实MemberShip的奥秘就在此,更多的方法详情可以查找MSDN,这里只是做权限的一个配置管理。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值