成员资格管理
成员资格简介
ASP.NET成员资格支持下列功能:
- 创建新用户和密码
- 将成员资格信息(用户名、密码和支持数据)存储在Microsoft SQL Server、Active Directory或其他数据存储区
- 对访问站点的用户进行身份验证
- 管理密码,包括创建、更改和重置密码
- 公开经过身份验证的用户的唯一标识,您可以在您自己的应用程序中使用该标识,也可以将该标识与ASP.NET个性化设置和角色管理(授权)系统集成
- 指定自定义成员资格提供程序,这使您可以改为用自己的代码管理成员资格及在自定义数据存储区中维护成员资格数据
成员资格管理模型
ASP.NET提供的成员资格管理功能,其核心是利用内置的成员库表(SQL Ser'ver)、成员资格管理API(Membership、MembershipUser等)、成员资格提供程序(SqlMembershipProvider等),实现模块化和自动化的成员资格管理模式
Membership类
Membership类用于验证用户凭据并管理用户设置,具有一下几个主要功能:
(1)创建和管理用户
(2)将成员资格信息存储在SQL Server或其他数据存储区中
(3)对访问站点的用户进行身份验证。可以以编程方式对用户进行身份验证,也可以使用登录控件创建一个只需很少代码或无需代码的完整身份验证系统
(4)管理密码,包括创建、更改、检索和重置密码等。可以选择配置成员资格管理功能,以要求一个密码提示问题及其答案来对忘记密码的用户密码进行重置
Membership类常用属性
Membership类常用方法
配置成员资格支持
<connectionStrings>
<add name="con" connectionString="Data Source=.;Initial Catalog=aspnetdb;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<!--
配置Membership
-->
<membership defaultProvider="AspProvider" userIsOnlineTimeWindow="10">
<providers>
<clear/>
<!--先清空,后添加-->
<add name="AspProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="con"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
applicationName="/" />
</providers>
</membership>
使用成员资格支持
(1)第一步
(2)第二步
(3)第三步
(4)第四步
(5)第五步
(6)第六步
(7)第七步
成员资格管理实例
登录页面
<body>
<form id="form1" runat="server">
<div>
<table style="text-align: center">
<tr>
<td>
帐号:<asp:TextBox ID="txtLoginName" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>
密码:<asp:TextBox ID="txtLoginPwd" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>
<asp:Button ID="btnLogin" runat="server" Text="登录" οnclick="btnLogin_Click" />
<asp:Button ID="btnAddUser" runat="server" Text="注册"
οnclick="btnAddUser_Click" />
</td>
</tr>
<tr>
<td>
<asp:Label ID="lblNum" runat="server" Text="Label"></asp:Label>
</td>
</tr>
</table>
</div>
</form>
</body>
public partial class Login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
lblNum.Text = "温馨提示:您还有" + Membership.MaxInvalidPasswordAttempts.ToString() + "次登录机会";
}
protected void btnLogin_Click(object sender, EventArgs e)
{
string name = txtLoginName.Text;
string pwd = txtLoginPwd.Text;
//使用Membership验证帐号密码
if (Membership.ValidateUser(name, pwd))
{
if (Request.QueryString["ReturnUrl"] != null)
{
//跳转到最初访问的页面
FormsAuthentication.RedirectFromLoginPage(name, false);
}
else
{
FormsAuthentication.SetAuthCookie(name, false);
Response.Redirect("Main.aspx");
}
}
else
{
ClientScript.RegisterStartupScript(GetType(), "login", "alert('帐号或密码错误')", true);
}
}
protected void btnAddUser_Click(object sender, EventArgs e)
{
Response.Redirect("AddUser.aspx");
}
}
注册页面
<body>
<form id="form1" runat="server">
<div align="center">
<table width="500" style="border: 1px solid #000000; text-align: center;">
<tr>
<td colspan="2">
注册新用户
</td>
</tr>
<tr>
<td>
用户名:
</td>
<td>
<asp:TextBox ID="txtName" runat="server" Width="184px"></asp:TextBox>
</td>
</tr>
<tr>
<td>
密码:
</td>
<td>
<asp:TextBox ID="txtPwd1" runat="server" Width="184px"></asp:TextBox>
</td>
</tr>
<tr>
<td>
确认密码:
</td>
<td>
<asp:TextBox ID="txtPwd2" runat="server" Width="184px"></asp:TextBox>
<asp:CompareValidator ID="CompareValidator1" runat="server" ErrorMessage="密码不一致"
Display="Dynamic" ControlToValidate="txtPwd2" ControlToCompare="txtPwd1"></asp:CompareValidator>
</td>
</tr>
<tr>
<td>
电子邮件:
</td>
<td>
<asp:TextBox ID="txtEmail" runat="server" Width="184px"></asp:TextBox>
</td>
</tr>
<tr>
<td>
密码确认提示:
</td>
<td>
<asp:TextBox ID="txtMsg" runat="server" Width="184px"></asp:TextBox>
</td>
</tr>
<tr>
<td>
答案:
</td>
<td>
<asp:TextBox ID="txtAnswer" runat="server" Width="184px"></asp:TextBox>
</td>
</tr>
<tr>
<td colspan="2">
<asp:CheckBox ID="chkActive" runat="server" Text="活动用户" />
<asp:Button ID="BtnCreate" runat="server" Text="创建用户" OnClick="BtnReg_Click" Height="23px"
Width="122px" />
</td>
</tr>
<tr>
<td colspan="2">
<asp:Label ID="lblMsg" runat="server" Text="提示:"></asp:Label>
</td>
</tr>
</table>
</div>
</form>
</body>
protected void Page_Load(object sender, EventArgs e)
{
}
protected void BtnReg_Click(object sender, EventArgs e)
{
//得到创建用户的信息
string name = this.txtName.Text;
string pwd = this.txtPwd1.Text;
string email = this.txtEmail.Text;
string Msg = this.txtMsg.Text;
string answer = this.txtAnswer.Text;
bool active = this.chkActive.Checked;
//创建用户登录状态
MembershipCreateStatus status;
//用户登录
MembershipUser user = Membership.CreateUser(name, pwd, email, Msg, answer, active, out status);
//查看当前用户登录的状态
switch (status)
{
case MembershipCreateStatus.InvalidEmail:
this.lblMsg.Text = "电子邮件不合法!";
break;
case MembershipCreateStatus.InvalidPassword:
this.lblMsg.Text = "密码格式不正确";
break;
case MembershipCreateStatus.Success:
this.lblMsg.Text = "创建用户成功";
break;
default:
this.lblMsg.Text = "发生了未知的错误!";
break;
}
}