asp.net2.0之用户成员管理及角色管理

对asp.net2.0关注很久了!!!也使用很久了,但自己在用的时候就是有点懒,不愿意学习其成员管理的机制,用到的时候都是自己写代码控制--就是自己建用户、角色,写代码控制他们之间的关系,以达到在程序中控制访问的目的。现在要讲课了,没办法,学吧。这时才发现原来.net2.0自己的成员管理功能如此优秀,如今对他们有了一定的理解,所以写到日志中,以和大家分享。
一、数据库配置:运行 aspnet_regsql.exe数据库配置工具(位置: C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727),配置好数据库。
二、配置 Web.config:主要是配置 <system.web>下的membership 和roleManager两个节点。同时还要配connectionStrings节点,不过这个大家都应该比较熟了,哈哈,就不多说了。
    1、membership的配置要复杂些
     <membership>
      <providers >
        <remove name="AspNetSqlMembershipProvider"/>
        <add name="AspNetSqlMembershipProvider" connectionStringName="MyConnectionString" 
             type="System.Web.Security.SqlMembershipProvider"
             enablePasswordReset="false"
             requiresUniqueEmail="true"
             requiresQuestionAndAnswer="true" 
             passwordFormat= "Hashed"
             maxInvalidPasswordAttempts= "10"
             passwordAttemptWindow="2"      
             minRequiredPasswordLength= "2"
             minRequiredNonalphanumericCharacters= "0"  
             passwordStrengthRegularExpression= "" 
             />

      </providers>
    </membership>
别的先不看,可以看到有一个remove 节点,这是因为在系统中有一个存在的AspNetSqlMembershipProvider配置,所以在一开始就要移除它,当然也可以换成<clear/>
这两种方式的话,add中的name就一定要写成AspNetSqlMembershipProvider,
还有一种方式,在membership中添加属性defaultProvider="MyProvider",这样的话,下面的节点name就要写成MyProvider了,如:

<membership defaultProvider="MyProvider">
      <providers >
        <add name="MyProvider" connectionStringName="MyConnectionString" 
             type="System.Web.Security.SqlMembershipProvider"
             enablePasswordReset="false"
             requiresUniqueEmail="true"
             requiresQuestionAndAnswer="true" 
             passwordFormat= "Hashed"
             maxInvalidPasswordAttempts= "10"
             passwordAttemptWindow="2"      
             minRequiredPasswordLength= "2"
             minRequiredNonalphanumericCharacters= "0"  
             passwordStrengthRegularExpression= ""
            
             />

      </providers>
    </membership>

connectionStringName属性是表示连接到数据库的字符串,但注意,关不是在这里写边接字符串,这里只是它的名字而已,此处使用的就是connectionStrings节中配置的数据库连接字符串的name。

 


其他节点中的属性说明如下:

enablePasswordRetrieval   获得一个值,指示当前成员资格提供程序是否配置为允许用户检索其密码。
enablePasswordReset   获得一个值,指示当前成员资格提供程序是否配置为允许用户重置其密码。
requiresQuestionAndAnswer   获取一个值,该值指示默认成员资格提供程序是否要求用户在进行密码重置和检索时回答密码提示问题。
applicationName   获取或设置应用程序的名称。
requiresUniqueEmail   指示用户在创建用户时是否必须提供唯一的电子邮件地址值。
passwordFormat   指示在成员资格数据存储区中存储密码的格式。下面有详细说明
maxInvalidPasswordAttempts   获取锁定成员资格用户前允许的无效密码或无效密码提示问题答案尝试次数。
minRequiredPasswordLength   获取密码所要求的最小长度。
minRequiredNonalphanumericCharacters   获取有效密码中必须包含的最少特殊字符数。特殊字符指的是“非数字”“非字母”字符。
passwordAttemptWindow   获取在锁定成员资格用户之前允许的最大无效密码或无效密码提示问题答案尝试次数的分钟数。

对PasswordFormat   的详细说明
属性指示存储密码的格式。密码可以采用   Clear、Encrypted   和   Hashed   密码格式存储。
Clear   密码以明文形式存储,这可以提高存储和检索密码的性能,但安全性较差,当数据源安全性受到威胁时此类密码很容易被读取。
Encrypted   密码在存储时进行了加密,可以在比较或检索密码时进行解密。此类密码在存储和检索时需要进行额外的处理,但比较安全,
   在数据源的安全性受到威胁时不容易被获取。
Hashed   密码在存储到数据库时使用单向哈希算法和随机生成的   salt   值进行哈希处理。在验证某一密码时,
将用数据库中的   salt   值对该密码进行哈希计算以进行验证。无法检索哈希密码。


 

2、roleManager如下:
 <roleManager enabled="true" cacheRolesInCookie="true"  >
      <providers>
        <clear/>
        <add name="AspNetSqlRoleProvider"  connectionStringName="MyConnectionString"  type="System.Web.Security.SqlRoleProvider"/>
      </providers>
    </roleManager>
他的属性和membership差不多,就不多说了, cacheRolesInCookie="true" 是启动高速缓存,在下次登录时,会先查看本机的cookie。
三、MemberShip 和 MemberShipUser
    很明显可以看出,一个是管理器,一个是实体,MemberShip有很多的静态方法,可对MemberShipUser进行CRUD操作,MemberShipUser也有很多方法,
    这样就可以非常快地管理用户了,如果把控制加上来一起用的话,会发现,根本不用写一行代码~太爽了。我有一个验证用户登录的代码:
if (Membership.ValidateUser(TextBox1.Text, TextBox2.Text))
        {
            FormsAuthentication.RedirectFromLoginPage(TextBox1.Text, false);
            MembershipUser user = Membership.GetUser(TextBox1.Text);
            user.Comment = "0";
            Membership.UpdateUser(user);
        }
        else
        {
            MembershipUser user = Membership.GetUser(TextBox1.Text);
            if (user != null)
            {
                user.Comment = Convert.ToString(Convert.ToInt32(user.Comment) + 1);
                Membership.UpdateUser(user);
            }
        }
其它的就很简单了,要配合自己的逻辑才能更快地写出来。
四、Roles,
    他只有一个类,也就相当于是管理器,而实体则是一个字符串,
    可以添加角色,删除角色,把用户添加或移出角色,查找等
    感觉他就没有什么说的了一样,也没有什么特殊性的东西。

你可能感兴趣的:(asp.net2.0之用户成员管理及角色管理)