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

原文: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了。

时间: 2024-08-01 16:29:50

ASP.NET关于Login控件使用,LoginView&#160;控件,CreateUserWizard&#160;控件的相关文章

asp.net 怎么实现多张图片一起上传 有没有什么第三方控件可供使用

问题描述 asp.net 怎么实现多张图片一起上传 有没有什么第三方控件可供使用 asp.net 怎么实现多张图片一起上传 有没有什么第三方控件可供使用 解决方案 http://blog.163.com/tianshenglongchang@126/blog/static/16462850320107724827852/ 解决方案二: swfupload,uploadify,不行你用html5的input file控件,设置multiple就可以同时选择多个文件进行上传 解决方案三: http:

asp.net ajax和asp.net 2.0中的fileupload打造无刷新文件上传控件

在做一个信息管理平台时用到了图片,就像做一个上传的正好用的是asp.net ajax就试着做了一个不很好 自定义用户控件文件 PicUpload.ascx 1<%@ control language="C#" autoeventwireup="true" inherits="Admin_PicUpload, App_Web_mboefw14" %>2 <asp:Image ID="EP_Image" runa

ASP.NET自定义控件 第八天 显示多个条目星级评分的列表控件

1. 引言 前几次任务里我们开发的星级控件只能显示一个条目的评分,在现实生活中, 经常会遇到需要向用户展示一系列数据的评分状态,例如下图所示: 列表控件-"> 本次任务里,我们将一起开发这样一个控件. 广告时间--最近在尝试写英文文章,申请了一个英文博客www.dev6.cn,欢 迎大家留下墨宝 2. 分析 通过上图可以看到,该自定义控件是一系列数据评分等级的列表,很显然需要 作为一个数据绑定控件来实现才可以灵活的显示多条数据,并且在该列表上方显 示了标题和当前的日期,为了允许用户灵活的定

asp.NET的这个系统的treeview点击后出现的不同模块不同控件,是怎么实现的,是不是通过动态添加控件,可是动态添加控件怎么设置控件的后台代码呢???

问题描述 asp.NET的这个系统的treeview点击后出现的不同模块不同控件,是怎么实现的,是不是通过动态添加控件,可是动态添加控件怎么设置控件的后台代码呢??? 解决方案 解决方案二:把10几年前的这个最基本的入门教程()中的例子全都做一遍,然后再问.解决方案三:引用1楼sp1234的回复: 把10几年前的这个最基本的入门教程()中的例子全都做一遍,然后再问. 果然是大神解决方案四:想必楼主说的是通过treeview实现菜单导航吧,给你一个实例参考

asp.net界面设计时怎样实现停靠在某一侧的panel控件隐藏或显示,就像visual的工具栏一样?

问题描述 asp.net界面设计时怎样实现停靠在某一侧的panel控件隐藏或显示,就像visual的工具栏一样? 解决方案 解决方案二:一个div,旁边飘一个小图片,点击这个小图片,控制div的display为显示或隐藏,再不济,控制其width为0也行

asp.net(C#)动态加载同一个目录里的两个用户控件(不是同时),一个正常,一个不正常

问题描述 动态加载的控件,本意是数据库里有几条记录就显示几个控件的,为什么同在一个目录下的两个用户控件,一个是数据库里有几条记录,就显示几个控件,而另一个是只显示一个控件呢?OracleDataReaderodr=DB.mycmd("select*frompet");TableRowtr=newTableRow();while(odr.Read()){i=i+1;TableCelltc=newTableCell();ControlGS=(Control)this.LoadControl

C# winform 关于ToolStrip控件工具项拖动到指定的Panel控件中

问题描述 C# winform 关于ToolStrip控件工具项拖动到指定的Panel控件中 C# Winform项目中,在form窗体中有一个ToolStrip控件(用于放所有的系统的功能项,目前大概有将近15个功能项,后续会陆续增加应用的功能项), 两个Panel控件(panel1和panel2控件是两个目标区,用于将ToolStrip控件中的子项拖放到的目标区域,在目标区域中打开或执行ToolStrip控件子项) 请问下,怎么样实现如下两个功能: 1.实现鼠标选中ToolStrip控件的子

android控件-android中xml设置控件的属性和java文件里设置控件的属性有何不同

问题描述 android中xml设置控件的属性和java文件里设置控件的属性有何不同 android中xml设置控件设置的属性和java文件里设置控件的属性有何不同 是不是java文件里设置可以改变动态的改变控件位置,文字颜色,文字大小 而在xml文件设置之后就无法改变 那具体在java文件设置的属性是如何改变的呢 解决方案 java中可以重新设置去改变xml的设置.但是xml不能去改变java中的设置. 解决方案二: 你可以这样理解,xml设置以后基本不会改变,如果会改变,就要在java里面设

vc加载jpeg图片-vc6.0mfc加载jpeg图片,但图片上有控件,移动窗口后,图片覆盖控件

问题描述 vc6.0mfc加载jpeg图片,但图片上有控件,移动窗口后,图片覆盖控件 vc6.0mfc中使用IPicture接口实现加载jpeg图片,但图片上有控件,移动窗口后,图片覆盖控件,怎么解决图片一直保持在控件之后呢?一下是源代码: 头文件: IStream m_pStream; //定义流对象 IPicture *m_pPicture; //定义接口对象 OLE_XSIZE_HIMETRIC m_JPGWidth; //图像宽度 OLE_YSIZE_HIMETRIC m_JPGHeig