MaxFree's Tech Space
MaxFree 的技术空间,有智慧的运用各种技术。

命名空间:System.Web.Security;

Membership 是 VS DotNET 2005 中内置的一个静态类。它用于对成员资格验证和操作。
它本身不提供对数据直接操作的方法,而是由它的 Provider 来完成。

// Membership 类
// (取自 .Net FrameWork 2.0 内部代码)
private static MembershipProvider s_Provider;

从这里可以看到 Membership 定义了一个局部静态对象 s_Provider,它是 MembershipProvider 类型。

若要实现成员资格提供程序,就必需创建一个继承 MembershipProvider 抽象类的类。
MembershipProvider 抽象类实现的必需的属性和方法,并提供了每个属性和方法的说明。

// 这是 machine.config 配置文件中一段信息

<membership>
  <providers>
    <add name="AspNetSqlMembershipProvider"
      type="System.Web.Security.SqlMembershipProvider,
            System.Web,
            Version=2.0.0.0,
            Culture=neutral,
            PublicKeyToken=b03f5f7f11d50a3a"
      connectionStringName="LocalSqlServer"
      enablePasswordRetrieval="false"
      enablePasswordReset="true"
      requiresQuestionAndAnswer="true"
      applicationName="/"
      requiresUniqueEmail="false"
      passwordFormat="Hashed"
      maxInvalidPasswordAttempts="5"
      minRequiredPasswordLength="7"
      minRequiredNonalphanumericCharacters="1"
      passwordAttemptWindow="10"
      passwordStrengthRegularExpression="" />
  </providers>
</membership>

它指示了 SqlMembershipProvider 类是作为 Membership 中 s_provider 的对象来调用。
因为 Membership 在 Initialize() 是时候会读取此配置信息,并将它实例化。

// Initialize() 方法中的一句代码
// (取自 .Net FrameWork 2.0 内部代码)
Membership.s_Provider = Membership.s_Providers[section1.DefaultProvider];

s_providers 是所有配置文件中的 <providers> 节内部的所有实例。
section1.DefaultProvider 是 <membership> 的 defaultProvider 属性值,
若示未定义就使用内部默认值 AspNetSqlMembershipProvider ,它由特性定义。

// MembershipSection 类中的 DefaultProvider 定义
// (取自 .Net FrameWork 2.0 内部代码)
[ConfigurationProperty("defaultProvider",
 DefaultValue="AspNetSqlMembershipProvider"),
 StringValidator(MinLength=1)]
public string DefaultProvider

至此,会不会明白一点了呢?

// SqlMembershipProvider 定义
// (取自 .Net FrameWork 2.0 内部代码)
public class SqlMembershipProvider : MembershipProvider

从这里可以看到 SqlMembershipProvider 是继承 MembershipProvider 类的.


当如果在我们自己系统中的 Web.Config 中定义了如下节:

<membership defaultProvider="MyProvider" userIsOnlineTimeWindow="15">
  <providers>
    <add
      name="MyProvider"
      type="Eos.Web.Security.MembershipEosProvider"
      connectionStringName="LocalSqlServer"
      enablePasswordRetrieval="true"
      enablePasswordReset="true"
      requiresQuestionAndAnswer="true"
      writeExceptionsToEventLog="true" />
  </providers>
</membership>

// SqlMembershipProvider 定义
// (取自 .Net FrameWork 2.0 内部代码)
public sealed class MembershipEosProvider : MembershipProvider

注意这里定义了 defaultProvider="MyProvider" 是表示 Membership 默认 MyProvider 为 s_Provider 对象。
而 MyProvider 是 Eos.Web.Security.MembershipEosProvider 类。它也继承 MembershipProvider 类。

posted on 2006-07-26 17:28  MaxFree  阅读(2611)  评论(1编辑  收藏  举报