ASP.NET关于Login控件使用,LoginView 控件,CreateUserWizard 控件

简介: 原文:ASP.NET关于Login控件使用,LoginView 控件,CreateUserWizard 控件 Login控件它是属于Membership服务的一部分,必须配置Membership提供程序和数据库... 如果你要使用自己的数据库则必须继承MembershipProvider抽象类重写自己的提供程序并正确配置Web.config...   ASP.NET登陆控件比较多,封装了大部分WEB应用中要实现系统登陆的系列功能,涉及到很多方面。
原文: ASP.NET关于Login控件使用,LoginView 控件,CreateUserWizard 控件

Login控件它是属于Membership服务的一部分,必须配置Membership提供程序和数据库...

如果你要使用自己的数据库则必须继承MembershipProvider抽象类重写自己的提供程序并正确配置Web.config...
 
ASP.NET登陆控件比较多,封装了大部分WEB应用中要实现系统登陆的系列功能,涉及到很多方面。众多 ASP.NET 登录控件一起为 ASP.NET Web 应用程序提供可靠的无需编程的登录解决方案。默认情况下,登录控件与 ASP.NET 成员资格和 Forms 身份验证集成,以帮助使网站的用户身份验证过程自动化。默认情况下,ASP.NET 登录控件以纯文本形式工作于 HTTP 上。如果您对安全性十分关注,那么可以使用带 SSL 加密的 HTTPS。
 注意

  如果将 ASP.NET 网页的 Method 从 POST(默认值)更改为 GET,则登录控件可能无法正常工作。

=============================================

LoginView 控件

 使用 LoginView 控件,可以向匿名用户和登录用户显示不同的信息。该控件显示以下两个模板之一:AnonymousTemplate 或 LoggedInTemplate。在这些模板中,您可以分别添加为匿名用户和经过身份验证的用户显示适当信息的标记和控件。

  LoginView 控件还包括 ViewChanging 和 ViewChanged 的事件,您可以为这些事件编写当用户登录和更改状态时的处理程序。

  LoginStatus 控件 LoginStatus 控件为没有通过身份验证的用户显示登录链接,为通过身份验证的用户显示注销链接。登录链接将用户带到登录页。注销链接将当前用户的身份重置为匿名用户。

  可以通过设置 LoginText 和 LoginImageUrl 属性自定义 LoginStatus 控件的外观。

  LoginName 控件 如果用户已使用 ASP.NET 成员资格登录,LoginName 控件将显示该用户的登录名。或者,如果站点使用集成 Windows 身份验证,该控件将显示用户的 Windows 帐户名。

  PasswordRecovery 控件 PasswordRecovery 控件允许根据创建帐户时所使用的电子邮件地址来找回用户密码。PasswordRecovery 控件会向用户发送包含密码的电子邮件。

  您可以配置 ASP.NET 成员资格,以使用不可逆的加密来存储密码。在这种情况下,PasswordRecovery 控件将生成一个新密码,而不是将原始密码发送给用户。

  您还可以配置成员资格,以包括一个用户为了找回密码必须回答的安全提示问题。如果这样做,PasswordRecovery 控件将在找回密码前提问该问题并核对答案。

  PasswordRecovery 控件要求您的应用程序能够将电子邮件转发给简单邮件传输协议 (SMTP) 服务器。您可以通过设置 MailDefinition 属性自定义发送给用户的电子邮件的文本和格式。

  注意

  电子邮件中的密码信息是以明文形式发送的。其 MailDefinition 属性设置用来自定义电子邮件。

  如下代码:

 


 < asp:PasswordRecovery ID="Passwo
  rdRecovery1" Runat="server" SubmitButtonText="Get Password" SubmitButtonType="Link">
  < MailDefinition From="administrator@Contoso.com" Subject="Your new password" BodyFileName="PasswordMail.txt" />
  < /asp:PasswordRecovery>

 

=================================================================== 

ASP.NET Login控件延伸:CreateUserWizard 控件

  CreateUserWizard 控件收集潜在用户提供的信息。默认情况下,CreateUserWizard 控件将新用户添加到 ASP.NET 成员资格系统中。

  CreateUserWizard 控件收集下列用户信息:

  用户名

  密码

  密码确认

  电子邮件地址

  安全提示问题

  安全答案

  此信息用来对用户进行身份验证并找回用户密码(如果需要的话)。

  注意

  CreateUserWizard 控件从 Wizard 控件继承。

  如下代码:

  ASP.NET Login控件延伸:ChangePassword 控件

  通过 ChangePassword 控件,用户可以更改其密码。用户必须首先提供原始密码,然后创建并确认新密码。如果原始密码正确,则用户密码将更改为新密码。该控件还支持发送关于新密码的电子邮件。

  ChangePassword 控件包含显示给用户的两个模板化视图。第一个模板是 ChangePasswordTemplate,它显示用来收集更改用户密码所需的数据的用户界面。第二个模板是 SuccessTemplate,它定义当用户密码更改成功以后显示的用户界面。

  ChangePassword 控件由通过身份验证和未通过身份验证的用户使用。如果用户未通过身份验证,该控件将提示用户输入登录名。如果用户已通过身份验证,该控件将用用户的登录名填充文本框。

======================================================================== 

今天上网找了一些关于Login控件的使用资料,遇到一个问题:Login控件本身具有不为空的验证,就是说当用户没有输入用户名或密码的时候,直接点提交不会通过验证,会在用户名和密码的后面出现“*”,意为必须输入的项。我想,如果我不想让它显示“*”,让显示“必须填写用户名”和“必须填写密码”的提示信息。上网找了半天,就是找不到我想要达到的效果。最后还是自己研究出来了。显示“*”是Login控件本身具备的特点,所以我选择了右键控件,选择“转换为模板”,这样Login就作为几个控件合在一起的组合体。显示“*”的是RequiredFieldValidator验证控件,将它的text属性“*”,改为你想要显示的提示就行了。

另外,如果想要用ValidationSummary和Login控件合用的话,只要将其ValidationGroup属性设置为Login控件的ID就可以了。

下面是从网上转载过来的关于Login控件的一些属性和事件:

Login控件

1.功能
Login控件是一个复合控件,它提供对网站上的用户进行身份验证所需的,所有常见的UI元素。所有登录方案都需要以下三个元素:

● 用于标识用户的惟一用户名。

● 用于验证用户标识的密码。

● 用于将登录信息发送到服务器的登录按钮。

Login 控件还提供以下支持附加功能的可选UI 元素:

● 密码提示链接。

● 用于在两次会话之间保留登录信息的“记住我”复选框。

● 为那些在登录时遇到问题的用户提供的帮助链接。

● 将用户重定向到注册页的“注册新用户”链接。

● 出现在登录窗体上的说明文本。

● 在用户未填写用户名或密码字段而直接单击登录按钮时,出现的自定义错误文本。

● 登录失败时出现的自定义错误文本。

● 登录成功时发生的自定义操作。

● 在用户已登录到站点时隐藏登录控件的方法

2.属性
Login控件部分常用属性及说明,如表1所示。

                                表1 Login控件最常用的属性及说明

属性                                               描述

CreateUserIconUrl             获取显示在新用户的注册页链接旁边的图像的位置

CreateUserText                获取或设置新用户注册页的链接文本

CreateUserUrl                 获取或设置新用户注册页的 URL

DestinationPageUrl            获取或设置在登录尝试成功时向用户显示的页面的 URL

FailureAction                 获取或设置当登录尝试失败时发生的操作

FailureText                   获取或设置当登录尝试失败时显示的文本

HelpPageText                  获取或设置登录帮助页链接的文本

HelpPageUrl                   获取或设置登录帮助页的URL

LoginButtonText               获取或设置Login控件的登录按钮的文本

LoginButtonType               获取或设置在呈现Login按钮时使用的按钮类型

MembershipProvider            获取或设置控件使用的成员资格数据提供程序的名称

Orientatio                    获取或设置一个值,该值指定页面上Login控件的元素的位置

PasswordLabelText             获取或设置 Password文本框的标签文本

PasswordRecoveryText          获取或设置密码恢复页链接的文本

PasswordRecoveryUrl           获取或设置密码恢复页的 URL

PasswordRequiredErrorMessage 获取或设置当密码字段为空时在 ValidationSummary控件中显示的错误信息

RememberMeText                获取或设置“记住我”复选框的标签文本

TextLayout                    指定 Login 控件的每个标签相对于其关联文本框的位置

TitleText                     获取或设置Login控件的标题

UserName                      获取用户输入的用户名

UserNameLabelText             获取或设置UserName文本框的标签文本

UserNameRequiredErrorMessage 获取或设置当用户名字段为空时在ValidationSummary 控件中显示的错误信息

ValidatorTextStyle            获取对 Style 属性集合的引用,这些属性定义与Login控件使用的验证程序关联的错误信息的外观

VisibleWhenLoggedIn           获取或设置一个值,该值指示在验证用户身份后是否显示 Login 控件

下面对比较重要的属性进行详细介绍。

(1)CreateUserText属性

此属性获取或设置新用户注册页的链接文本。

语法:

public virtual string CreateUserText { get; set; }


属性值:

新用户注册页的链接文本。默认为 Empty。

说明:CreateUserText 属性包含站点注册页的链接文本。在CreateUserUrl属性中指定注册页的URL。如果CreateUserUrl为空,则向用户显示CreateUserText属性中的文本,但不以链接的形式显示。如果CreateUserText属性为空,则不向用户提供注册页链接

(2)CreateUserUrl属性

此属性用来设置新用户注册页的URL,它包含网站新用户注册页的URL。

语法:

public virtual string CreateUserUrl { get; set; }


属性值:

新用户注册页的 URL。默认为 Empty。

说明:CreateUserText属性包含链接使用的文本。如果CreateUserText属性为空,则不向用户提供注册页链接。

(3)DestinationPageUrl属性

此属性获取或设置在登录尝试成功时向用户显示的页面的URL。

语法:

public virtual string DestinationPageUrl { get; set; }


属性值:

登录尝试成功时用户被重定向到的页面的 URL。默认为Empty。

例如:登录成功要转向“Default2.aspx”页面。代码如下:

Login1.DestinationPageUrl = "~/Default2.aspx";


(4)FailureAction属性

此属性获取或设置当登录尝试失败时发生的操作。

语法:

public virtual LoginFailureAction FailureAction { get; set; }


属性值:

LoginFailureAction枚举值之一。默认为Refresh。

LoginFailureAction枚举值及说明如表5所示。

                                表5 LoginFailureAction枚举值及说明

枚举值                                             说明

RedirectToLoginPage           将用户重定向到站点的配置文件(Machine.config 和 Web.config)中所定义的登录页

Refresh                       刷新当前页,以便 Login控件可以显示错误消息

(5)HelpPageUrl属性

此属性获取或设置登录帮助页的URL。

语法:

public virtual string HelpPageUrl { get; set; }


属性值:

登录帮助页的URL。默认为Empty。

    说明:HelpPageUrl 属性包含网站的登录帮助页的URL。HelpPageText属性包含用于链接的文本。如果HelpPageUrl为空,则向用户显示HelpPageText属性中的文本,但不以链接的形式显示。如果HelpPageText属性为空,则不向用户提供登录帮助页链接。

(6)HelpPageText属性

此属性获取或设置登录帮助页链接的文本

语法:

public virtual string HelpPageText { get; set; }


属性值:

登录帮助页链接的文本。默认为Empty。

(7)LoginButtonType属性

此属性获取或设置在呈现Login按钮时使用的按钮类型。

语法:

public virtual ButtonType LoginButtonType { get; set; }


属性值:

ButtonType枚举值之一。默认为Button。ButtonType枚举值及说明如表6所示。

     表6 ButtonType 枚举值及说明

枚举值          说明

Button          命令按钮

Image    显示图像的按钮

Link    超链接样式的按钮

(8)PasswordRecoveryUrl属性

此属性获取或设置密码恢复页的URL。

语法:

public virtual string PasswordRecoveryText { get; set; }


属性值:

密码恢复页链接的文本。默认为Empty。

(9)PasswordRequiredErrorMessage属性

此属性获取或设置当用户名字段为空时在ValidationSummary控件中显示的错误信息

语法:

public virtual string PasswordRequiredErrorMessage { get; set; }


属性值:

当密码字段为空时,在ValidationSummary控件中显示的错误信息。默认值是“密码”。

(10)RememberMeText 属性

此属性获取或设置“记住我”复选框的标签文本。

语法:

public virtual string RememberMeText { get; set; }


属性值:

“记住我”复选框的标签文本。默认为下“次记住我”。

(11)UserNameRequiredErrorMessag属性

获取或设置当用户名字段为空时,在ValidationSummary控件中显示的错误信息。

语法:

public virtual string UserNameRequiredErrorMessage { get; set; }


属性值:

当用户名字段为空时在ValidationSummary 控件中显示的错误信息。默认为“用户名”。

(12)VisibleWhenLoggedIn属性

此属性获取或设置一个值,该值指示在验证用户身份后是否显示Login控件。

语法:

public virtual bool VisibleWhenLoggedIn { get; set; }


属性值:

如果在验证用户身份后隐藏Login控件,则为false;否则为true。默认为true。

本例使用Login控件,实现成员资格用户登录网站验证用户名和密码。示例运行,输入用户名“mr”,密码“mr.soft”登录网站。
Login 控件设计代码如下。

<asp:Login ID="Login1" runat="server" BackColor="#F7F7DE" BorderColor="#CCCC99" BorderStyle="Solid"
            BorderWidth="1px" DestinationPageUrl="~/Default.aspx" Font-Names="Verdana" Font-Size="10pt">
            <TitleTextStyle BackColor="#6B696B" Font-Bold="True" ForeColor="#FFFFFF" />
</asp:Login>


3.事件
Login控件的常用事件及说明,如表7所示。

                                      表7 Login控件的常用事件及说明

事件                                                        描述

Authenticate       验证用户的身份后出现

LoggedIn       在用户登录到网站并进行身份验证后出现

LoggingIn       在用户未进行身份验证而提交登录信息时出现

LoginError       当检测到登录错误时出现

下面对比较重要的事件进行详细介绍。

(1)Authenticate事件

验证用户的身份后出现。当用户使用Login控件登录到网站时,引发Authenticate事件。自定义身份验证方案可以使用Authenticate事件对用户进行身份验证。定义身份验证方案应该将Authenticated属性设置为 true,以指示已验证用户的身份。

语法:

public event AuthenticateEventHandlerAuthenticate


    说明:在用户提交登录信息后,Login控件先引发LoggingIn事件,然后引发Authenticate事件,最后引发LoggedIn事件。

本例使用Login 控件的Authenticate事件,实现自定义用户登录网站。示例运行,输入用户名“System”,密码“111”登录网站。

代码如下。
protected void Login1_Authenticate1(object sender, AuthenticateEventArgs e)
    {
        System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection("server=ZHY\\ZHY;uid=sa;pwd=;database=aspnetdb");
        con.Open();
        string strSql = "select * from tb_01 where userid='" + Login1.UserName.ToString() + "' and username='" + Login1.Password + "'";
        System.Data.SqlClient.SqlCommand com = new System.Data.SqlClient.SqlCommand(strSql, con);
        System.Data.SqlClient.SqlDataReader dr = com.ExecuteReader();
        if (dr.Read())
        {
            e.Authenticated = true;//通过验证
        }
        else
        {
            e.Authenticated = false;
        }
        dr.Close();
        con.Close();
    }

==============================================

摘要:asp.net 2.0的Membership组件提供了一组非常简单易用的接口供开发者进行用户管理,用户验证。本文将它对它的实现原理进行简单的分析,介绍如何正确的使用,以及如何对它进扩展。

一、MembershipProvider抽象类

在很多情况下,在使用Membership的时候我们并不会直接使用到这个类。在MembershipProvider类定义的都是一些抽象方法和抽象属性,就是这些方法和属性构成了Membership接口的基本规范,而且在.NET 框架内部使用Membership的功能都是通过这个类型调用的。继承类通过实现这些接口来提供不用环境下的用户管理功能,并且对Membership框架本身并没有影响,下面来看看MembershipProvider原形定义:


public abstract class MembershipProvider : ProviderBase

...{

      // Events

      public event MembershipValidatePasswordEventHandler ValidatingPassword;

 

      // Methods

      protected MembershipProvider();

      public abstract bool ChangePassword(string username, string oldPassword, string newPassword);

      public abstract bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer);

      public abstract MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status);

      protected virtual byte[] DecryptPassword(byte[] encodedPassword);

      public abstract bool DeleteUser(string username, bool deleteAllRelatedData);

      internal string EncodePassword(string pass, int passwordFormat, string salt);

      protected virtual byte[] EncryptPassword(byte[] password);

      public abstract MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords);

      public abstract MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords);

      internal string GenerateSalt();

      public abstract MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords);

      public abstract int GetNumberOfUsersOnline();

      public abstract string GetPassword(string username, string answer);

      public abstract MembershipUser GetUser(object providerUserKey, bool userIsOnline);

      public abstract MembershipUser GetUser(string username, bool userIsOnline);

      internal MembershipUser GetUser(string username, bool userIsOnline, bool throwOnError);

      public abstract string GetUserNameByEmail(string email);

      protected virtual void OnValidatingPassword(ValidatePasswordEventArgs e);

      public abstract string ResetPassword(string username, string answer);

      internal string UnEncodePassword(string pass, int passwordFormat);

      public abstract bool UnlockUser(string userName);

      public abstract void UpdateUser(MembershipUser user);

      public abstract bool ValidateUser(string username, string password);

 

      // Properties

      public abstract string ApplicationName ...{ get; set; }

      public abstract bool EnablePasswordReset ...{ get; }

      public abstract bool EnablePasswordRetrieval ...{ get; }

      public abstract int MaxInvalidPasswordAttempts ...{ get; }

      public abstract int MinRequiredNonAlphanumericCharacters ...{ get; }

      public abstract int MinRequiredPasswordLength ...{ get; }

      public abstract int PasswordAttemptWindow ...{ get; }

      public abstract MembershipPasswordFormat PasswordFormat ...{ get; }

      public abstract string PasswordStrengthRegularExpression ...{ get; }

      public abstract bool RequiresQuestionAndAnswer ...{ get; }

      public abstract bool RequiresUniqueEmail ...{ get; }

 

      // Fields

      private MembershipValidatePasswordEventHandler _EventHandler;

      private const int SALT_SIZE_IN_BYTES = 0x10;

}

 


其中修饰符为internal是几个方法是密码的辅助方法,用于加密,解密和验证密码。但这边的设计似乎有一些问题,将这些方法定义为internal范围好像有点不妥,将这些方法定义在基类中,就是为了能够被复用,但是从效果上来看,不是这样的,因为internal的成员只允许在本程序集内被使用(正常情况下,不包括反射等其它方法),这就是说我们自己扩展的MembershipProvider是无法使用到这些方法的。而且从目前应用范围来看,目前这些方法也只有在SqlMembershipProvider中被使用到,所以我认为应该将这些方法修饰符修改为protected。

二、Membership 静态类

上面提到过,一般情况下我们都不会直接去使用到MembershipProvider抽象,因为这涉及到如何去实例化真正的Membership服务类的问题,涉及到配置和实例化对象的问题一般都是比较棘手的问题,对初学者来说,想要掌握也不是那么容易。那在.NET框架中就是通过Membership(Static Class)这个静态类来屏蔽掉这一层的复杂关系。Membership(Static Class)除了使用者屏蔽读配置文件,初始对象等一些基本工作外,还有一个重要的作用就是重载所有的MembershipProvider所以有API,甚至为了让用户更加方便的使用,将这些方法重载为静态方法,并且提供了MembershipProvider基本API基础上更加丰富的重载实现供使用者调用。这就直接支持了不管是在UI层,还是其它的各个工程,只需要引用System.Web.Security命名空间,就可以不用关心任何细节的享受到Membership给我们提供的各种便利。下面来看看Membership(Static Class)的原型定义:(利用Lutz Roder’s .NET Reflector可以查看它的所有实现。)

public static class Membership

...{

      // Events

      public static  event MembershipValidatePasswordEventHandler ValidatingPassword;

 

      // Methods

      static Membership();

      public static MembershipUser CreateUser(string username, string password);

      public static MembershipUser CreateUser(string username, string password, string email);

      public static MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, out MembershipCreateStatus status);

      public static MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status);

      public static bool DeleteUser(string username);

      public static bool DeleteUser(string username, bool deleteAllRelatedData);

      public static MembershipUserCollection FindUsersByEmail(string emailToMatch);

      public static MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords);

      public static MembershipUserCollection FindUsersByName(string usernameToMatch);

      public static MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords);

      public static string GeneratePassword(int length, int numberOfNonAlphanumericCharacters);

      public static MembershipUserCollection GetAllUsers();

      public static MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords);

      private static string GetCurrentUserName();

      public static int GetNumberOfUsersOnline();

      public static MembershipUser GetUser();

      public static MembershipUser GetUser(bool userIsOnline);

      public static MembershipUser GetUser(object providerUserKey);

      public static MembershipUser GetUser(string username);

      public static MembershipUser GetUser(object providerUserKey, bool userIsOnline);

      public static MembershipUser GetUser(string username, bool userIsOnline);

      public static string GetUserNameByEmail(string emailToMatch);

      private static void Initialize();

      public static void UpdateUser(MembershipUser user);

      public static bool ValidateUser(string username, string password);

 

      // Properties

      public static string ApplicationName ...{ get; set; }

      public static bool EnablePasswordReset ...{ get; }

      public static bool EnablePasswordRetrieval ...{ get; }

      public static string HashAlgorithmType ...{ get; }

      internal static bool IsHashAlgorithmFromMembershipConfig ...{ get; }

      public static int MaxInvalidPasswordAttempts ...{ get; }

      public static int MinRequiredNonAlphanumericCharacters ...{ get; }

      public static int MinRequiredPasswordLength ...{ get; }

      public static int PasswordAttemptWindow ...{ get; }

      public static string PasswordStrengthRegularExpression ...{ get; }

      public static MembershipProvider Provider ...{ get; }

      public static MembershipProviderCollection Providers ...{ get; }

      public static bool RequiresQuestionAndAnswer ...{ get; }

      public static int UserIsOnlineTimeWindow ...{ get; }

 

      // Fields

      private static char[] punctuations;

      private static bool s_HashAlgorithmFromConfig;

      private static string s_HashAlgorithmType;

      private static bool s_Initialized;

      private static Exception s_InitializeException;

      private static object s_lock;

      private static MembershipProvider s_Provider;

      private static MembershipProviderCollection s_Providers;

      private static int s_UserIsOnlineTimeWindow;

}

 

说到这里,就不得不多罗嗦两句。在看Membership(Static Class)实现代码的过程中,可以发现,每一个Membersip API重载都最后都是调用属性Provider的方法,这个属性的类型就是MembershipProvider类型,只有看到这里,你也许才会理解MembershipProvider的重要作用了吧。还有一个Providers属性,这个属性就是获得web.config中配置的所有的Membership提供服务类。它们都是静态属性,但是它们怎么去实例化的呢?就是通过调用Membership. Initialize()这个方法,在每次调用这两个属性的时候,都会调用这个方法去判断是否已初始化了Membership提供服务类了,如果没有则去调用配置服务类,读取配置内容,从而进行初始化。到此你可能也就不难理解了,为什么我们使用那么简单了!

三、SqlMembershipProvider介绍和使用配置

OK,通过上面的介绍应该基本可以了解Membership的整体结构了吧?(如何还没有,可能是你没有打开Lutz Roder’s .NET Reflector去分析它的实现代码,或者是对抽象类的作用还没弄明白)。不管怎么样,我们最终的目的就是要学会如何去使用。

在这之前,我先要介绍一下,在.NET 框架中提供的两个MembershipProvider实现类:ActiveDirectoryMembershipProvider和SqlMembershipProvider(如何知道这两个类的?在MembershipProvider的Derived Types就可以看到所有的继承类了。)前者是提供基本活动目录下的用户管理(我也没有实践过),后者就是我们最经常使用到的基于SqlServer的用户管理实现。

到了介绍如何使用了,其实园子里已经有了这方面的文章((翻译)怎么在ASP.NET 2.0中使用Membership),我也不多费口舌了。但这边要告诉大家一个最直接的学习和参考使用的办法。在系统盘找到并打开machine.config,找到AspNetSqlMembershipProvider节点,看到没有,其实这个就是一个最基本的Membership配置了,只不过是还少了一个defaultProvider属性的指定,指定了这个属性后,你再使用Login控件,进行用户登录验证就无需使用任何代码了。不信你可以试试。(关于Forms验证,就不在这里多做介绍,可以参考相关资料。关于SqlMembershipProvider的更多属性的介绍可以参看MSDN)。

四、如何自定义MembershipProvider,现有其它的MembershipProvider资源

那么,我们如何去自定义一个MembershipProvider呢?其实如果你已经了解了Membership的结构后我相信对你来说已经不是一件很难的事了,但是考虑到要完整的写一个MembershipProvider还是有一定的工作量和难度的。对于我们来说,更多的地方可能是对现有的Provider进行扩展,如SqlMembershipProvider。那其实这是非常简单的,我们只需要继承自SqlMembershipProvider,(悄悄告诉你,在Initialize方法config参数中保存的就是Provider对应配置节的属性名和值)然后扩展和重写所需的方法就可以了。使用的时候,在Provider配置节中,将type的值改为你的类名就OK了。

目录
相关文章
|
2月前
|
SQL 开发框架 前端开发
ASP.NET WEB项目中GridView与Repeater数据绑定控件的用法
ASP.NET WEB项目中GridView与Repeater数据绑定控件的用法
32 0
|
3月前
|
SQL 开发框架 JavaScript
分享33个ASP.NET电子商务源码和40个ASP.NET控件组件源码,总有一款适合您
分享33个ASP.NET电子商务源码和40个ASP.NET控件组件源码,总有一款适合您
29 0
|
4月前
|
JavaScript C#
【傻瓜级JS-DLL-WINCC-PLC交互】2.wincc使用C#开发的.net控件
【傻瓜级JS-DLL-WINCC-PLC交互】2.wincc使用C#开发的.net控件
39 0
|
4月前
|
JavaScript Linux C#
【傻瓜级JS-DLL-WINCC-PLC交互】1.C#用windows窗体控件创建.net控件
【傻瓜级JS-DLL-WINCC-PLC交互】1.C#用windows窗体控件创建.net控件
61 0
|
4月前
|
开发框架 .NET 数据安全/隐私保护
Asp.Net第二章服务器端控件
Asp.Net第二章服务器端控件
27 0
|
4月前
|
开发框架 JavaScript .NET
Asp.Net就业课之三验证控件
Asp.Net就业课之三验证控件
44 0
|
前端开发 JavaScript .NET
NET中验证控件表达式汇总
ASP.NET为开发人员提供了一整套完整的服务器控件来验证用户输入的信息是否有效。这些控件如下:     1、RequiredFieldValidator:验证一个必填字段,如果这个字段没填,那么,将不能提交信息。
968 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
38 0
|
28天前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
28 0
|
28天前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
5 0