VS自带注册用户控件CreateUserWizard,这个控件虽然可以修改,但毕竟是别人的东西,很多地方不符合自己的要求。因此很多时候我们都希望自己来制作漂亮的注册页面。
在制作注册页面之前,我们需要先配置web.config,也就是配置Membership节。web.config的配置情况决定着注册页面的制作,比如是否需要注册密码提示问题,密码提示答案,注册的密码是否进行加密,注册用户是否需要经过审核等。
< membership defaultProvider = " SqlProvider " userIsOnlineTimeWindow = " 30 " >
< providers >
< clear />
< add name = " SqlProvider "
type = " System.Web.Security.SqlMembershipProvider "
connectionStringName = " MySqlConnection "
applicationName = " MyApplication "
enablePasswordRetrieval = " false "
enablePasswordReset = " true "
requiresQuestionAndAnswer = " true "
requiresUniqueEmail = " true "
passwordFormat = " Hashed " />
</ providers >
</ membership >
userIsOnlineTimeWindow:指定用户在最近一次活动的日期/时间戳之后被视为联机的分钟数。比如我设为30分钟。
connectionStringName---连接字符串,根据自己的网站进行修改
enablePasswordRetrieval-----指示当前成员资格提供程序是否配置为允许用户检索其密码,如果网站需要提供密码找回功能、修改密码功能等,就需要设置成true;
enablePasswordReset-----指示当前成员资格提供程序是否配置为允许用户重置其密码。如果网站需要提供密码修改功能,最好设置成true;
requiresQuestionAndAnswer-----该值指示默认成员资格提供程序是否要求用户在进行密码重置和检索时回答密码提示问题。同上,如果网站需要提供密码找回功能、用户审核功能,就需要设置成true;如果不用这些功能,尽是设置成false;
requireUniqueEmail-----指示当前成员资格提供程序是否配置为不同用户的E-mail必须不同。一般设置成false;
passwordFormat-----描述存储成员用户密码的加密格式。如果设为Clear,则以明文方式保存,如果设为Hashed,则密码以哈希码加密方式保存。以明文方式保存,修改密码方便,但安全度不高。以哈希码加密保存,安全度很高,但修改密码很费事。
MaxInvalidPasswordAttempts:获取锁定成员资格用户前允许的无效密码或无效密码提示问题答案尝试次数。默认允许用户输错密码5次,5次密码都输错后,此用户将自动锁定。即IsLockedOut=true;
MinRequiredNonAlphanumericCharacters 获取有效密码中必须包含的最少特殊字符数。如果想让用户随意设置密码,此处最好设置为0
MinRequiredPasswordLength 获取密码所要求的最小长度。
配置好web.config之后,就可以开始制作注册页面了。
注册页面大体可分为四种:
①、只需要注册用户和密码。
②、只需要注册用户名、密码和邮箱
③、需要注册用户名、密码和邮箱,还需要密码提示问题和密码提示答案。以便以后能找回密码。
④、注册用户成功的时候,需要管理员进行审核,而且用户名不能重复。
不管哪一种注册方式,都是使用的Membership.CreateUser方法,只是参数不同而也。
第一种注册方法:
Membership.CreateUser(username,password);
第二种注册方法:
Membership.CreateUser(username,password,email);
第三种和第四种注册方法:
Membership.CreateUser(username,password,email,passwordQestion,passwordAnswer,isapproved,status)
需要5个参数,分别为用户名、密码、邮箱、密码提示问题、密码提示答案、是否审核、注册状态。
如果要让用户自己输入密码提示问题和密码提示答案,就做两个文本框。如果不想让用户自己输入,可以自己确定两个固定值。
比如:
Membership.CreateUser(username,password,email,"default","default",isapproved,status);
既然自己确定两个值,那又为什么要用这个重载方法呢,主要是为了isapproved和status这两个参数,因为前面两个重载方法没有这两个参数。
isapprove:设定注册的时候,用户的审核情况,如果设为true,则用户注册完就自动审核成功。如果设为false,则注册完成后,需要管理员审核才能开通此用户。审核过程,就是通过sql语句使isapproved的值由false变为true的过程,当然也可以直接修改数据库。
status:注册状态。因为注册成功用户是写入aspnet_Users和aspnet_Membership这两个表,而这两个表的主键都是userid,而不是username。因此注册用户的时候,默认用户名和邮箱是可以重复的。如果我们不想让用户注册相同的用户名和相同的邮箱,就可以通过status来设置。
例:
protected void Btnreg_Click( object sender, EventArgs e)
{
MembershipCreateStatus status;
Membership.CreateUser(Txtuser.Text.Trim(),Txtpwd.Text.Trim(),Txtemail.Text.Trim(), " default " , " default " , false , out status);
switch (status)
{
case MembershipCreateStatus.DuplicateUserName:
Response.Write( " <script>alert('用户名已经存在!');window.location.href=window.location.href</script> " );
break ;
case MembershipCreateStatus.Success:
Response.Write( " <script>alert('注册成功,请等待老师审核');window.location.href=window.location.href</script> " );
break ;
case MembershipCreateStatus.DuplicateEmail:
Response.Write( " <script>alert('此邮箱已经存在,请使用另一个邮箱注册');window.location.href=window.location.href</script> " );
break ;
default :
Response.Write( " <script>alert('注册出错,请重新注册!');window.location.href=window.location.href</script> " );
break ;
}
}
上面的代码注册情况就是:密码提示问题和密码提示答案都设置为"default";isapproved设置为false,也就是注册用户需要审核(如果不需要审核则改为true);通过status参数,可以避免用户注册相同的用户名和相同的邮箱。
如果不需要审核,也可以重名,则可以使用前面的第一种和第二种注册方法。这两注册方法,需要在web.config里面将enablePasswordRetrieval、requiresQuestionAndAnswer都设置成false;