个人总结membrship
本文目录:
本文目录: 1
1. membership简介 1
2. membership在sql server中的设置 2
3. 配置web.config 3
4. 创建用户CreateUserWizard控件 6
5. 用户登录login控件 8
6. 显示当前用户的名称LoginName控件 8
8. 为不同类别用户呈现不同内容的LoginView控件 9
9. 更改密码的ChangePassword控件 11
10. 自助找回密码的PasswordRecovery控件 12
11. 总结 14
12. 直接使用Membership API 14
13. 会员供给者模型工作原理 15
14. Membership API的公共方法 16
15 在注册过程中合并个性化属性 17
1. membership简介
membership,真的很有趣,很方便,很有用。介绍给大家。
在 ASP.NET 应用程序中,Membership 类用于验证用户凭据并管理用户设置(如密码和电子邮件地址)。Membership 类可以独自使用,或者与 FormsAuthentication 一起使用,以创建一个完整的 Web 应用程序或网站的用户身份验证系统。Login 控件封装了 Membership 类,从而提供一种便捷的用户验证机制。
Membership 类提供的功能可用于:
1)创建新用户。
2)将成员资格信息(用户名、密码、电子邮件地址及支持数据)存储在 Microsoft SQL Server 或其他类似的数据存储区。
3)对访问网站的用户进行身份验证。可以以编程方式对用户进行身份验证,也可以使用 Login 控件创建一个只需很少代码或无需代码的完整的身份验证系统。
4)管理密码。包括创建、更改、检索和重置密码等等。可以选择配置 ASP.NET 成员资格以要求一个密码提示问题及其答案来对忘记密码的用户的密码重置和检索请求进行身份验证。
默认情况下,ASP.NET 成员资格可支持所有 ASP.NET 应用程序。默认成员资格提供程序为 SqlMembershipProvider 并在计算机配置中以名称 AspNetSqlProvider 指定。SqlMembershipProvider 的默认实例配置为连接到 Microsoft SQL Server 的一个本地实例。
2. membership在sql server中的设置
要使用membership,需要对数据库进行一些设置,使用过membership的朋友知道,数据库中有一些固有的表、视图和存储过程,我们自己的表中没有这些东西。不过,我们可以通过向导来创建它们,那就是aspnet_regsql.exe,一般来说它位于:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727(我的就在这里)
它既可以创建数据库中的选项,也可以移除这些设置。
在运行这个程序之前,我在sql server2005中建立了一个空的数据库:membershipdemo。建立membershipdemo后,我们运行aspnet_regsql.exe,指定membership为membershipdemo。
完成之后,空空的数据库就有很多内容了,不过具体的内容暂时不必管。继续后面的内容。
3. 配置web.config
web.config也是要修改的。在system.web节点下添加authentication节点。
membership既然是用于成员资格管理,当然要求登录验证身份,所以首先加上一个forms验证。
<authentication mode="Forms">
<forms loginurl="login.aspx" name=".aspxlogin"/>
</authentication>
同样在system.web节点下添加membership节点。
<membership defaultprovider="AspNetSqlMembershipProvider" userisonlinetimewindow="15" hashalgorithmtype="">
<providers>
<clear/>
<add connectionstringname="ConnectionString" enablepasswordretrieval="false" enablepasswordreset="true" requiresquestionandanswer="true" applicationname="/" requiresuniqueemail="false" passwordformat="Hashed" maxinvalidpasswordattempts="5" minrequiredpasswordlength="7" minrequirednonalphanumericcharacters="1" passwordattemptwindow="10" passwordstrengthregularexpression="" name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, version="2.0.0.0," culture="neutral," publickeytoken="b03f5f7f11d50a3a"/">
</providers>
</membership>
属性解释说明:
defaultProvider:提供程序的名称。默认为 AspNetSqlMembershipProvider。如果你有多个Provider的话,指定一个默认值是明智的做法
userIsOnlineTimeWindow:指定用户在最近一次活动的日期/时间戳之后被视为联机的分钟数。
hashAlgorithmType:用于哈希密码的算法的标识符,或为空以使用默认哈希算法。connectionStringName:membership数据库的连接名称。
enablePasswordRetrieval:指示当前成员资格提供程序是否配置为允许用户检索其密码。
enablePasswordReset:指示当前成员资格提供程序是否配置为允许用户重置其密码。
requiresQuestionAndAnswer:指示默认成员资格提供程序是否要求用户在进行密码重置和检索时回答密码提示问题。
applicationName:应用程序的名称。
requiresUniqueEmail:指示成员资格提供程序是否配置为要求每个用户名具有唯一的电子邮件地址。
passwordFormat:指示在成员资格数据存储区中存储密码的格式。值可选Clear、Encrypted 和 Hashed。Clear 密码以明文形式存储,这可以提高存储和检索密码的性能,但安全性较差,当数据源安全性受到威胁时此类密码很容易被读取。Encrypted 密码在存储时进行了加密,可以在比较或检索密码时进行解密。此类密码在存储和检索时需要进行额外的处理,但比较安全,在数据源的安全性受到威胁时不容易被获取。Hashed 密码在存储到数据库时使用单向哈希算法和随机生成的 salt 值进行哈希处理。在验证某一密码时,将用数据库中的 salt 值对该密码进行哈希计算以进行验证。无法检索哈希密码。
maxInvalidPasswordAttempts:锁定成员资格用户前允许的无效密码或无效密码提示问题答案尝试次数。
minRequiredPasswordLength:密码所要求的最小长度。
minRequiredNonalphanumericCharacters:有效密码中必须包含的最少特殊字符数。
// <!--设为0表示不需要特殊字符-->
passwordAttemptWindow:在锁定成员资格用户之前允许的最大无效密码或无效密码提示问题答案尝试次数的分钟数。这是为了 防止不明来源反复尝试来猜测成员资格用户的密码或密码提示问题答案的额外措施。
passwordStrengthRegularExpression:计算密码的正则表达式。
为membership配置web.config后,再配置其角色管理roleManager,也是在system.web下。
<rolemanager enabled="true" cacherolesincookie="true">
<providers>
<clear/>
<add connectionstringname="ConnectionString" applicationname="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, version="2.0.0.0," culture="neutral," publickeytoken="b03f5f7f11d50a3a"/">
</providers>
</rolemanager>
属性解释说明:
cacheRolesInCookie:指示当前用户的角色是否已缓存在某个 Cookie 中。
当 CacheRolesInCookie 属性在配置文件中设置为 true 时,每个用户的角色信息就会存储在客户端上的某个 Cookie 中。当角色管理检查确定某个用户是否属于某个特定角色时,在调用角色提供程序在数据源中检查角色列表之前,将先检查角色 Cookie。该 Cookie 在客户端上会动态更新以缓存最近已验证的角色名称。
web.config就配置差不多了。
真正步入正题。
4. 创建用户CreateUserWizard控件
在vs2005中创建一个aspx页面,取名CreateUserWizard.aspx。直接从toolbox中拖入一个CreateUserWizard控件,设置一下FinishDestinationPageUrl属性,该属性指示用户创建完成后,用户点击“继续”后定向的页面。
<asp:CreateUserWizard id="CreateUserWizard1" runat="server" continuedestinationpageurl="~/Default.aspx">
</asp:CreateUserWizard>
现在不做任何设置,在vs2005的中design视图中可以看到
测试一下先!
提交,出现下面结果:
所以,正确设置membership后,注册用户就立马可以使用了。这是CreateUserWizard的默认模板,你也可以自己创建你需要的模板,vs2005可以帮你转换出来。你可以修改一下,转换后就是这样。
5. 用户登录login控件
CreateUserWizard 可以直接拖出来用,login 控件也是一样。在页面中放入一个login,代码很简单。
<asp:Login id="Login1" runat="server" destinationpageurl="~/admin/Default.aspx" passwordrecoverytext="找回密码" passwordrecoveryurl="PasswordRecovery.aspx">
</asp:Login>
属性解释:
DestinationPageUrl:设置在登录尝试成功时向用户显示的页面的 URL。
PasswordRecoveryText:设置密码恢复页链接的文本。
PasswordRecoveryUrl:设置密码恢复页的 URL。 如果用户忘记密码,可以点击这个链接点找回他的密码。
同样,你也可以自写模板。
这次先不忙测试。等一下后面的控件!
6. 显示当前用户的名称LoginName控件
这个控件很简单,就是用来呈现用户名的。
<asp:LoginName id="LoginName1" runat="server" formatstring="您好,{0},您目前的身份是:注册用户" />
如果当前登录的是blueidea,那么显示的就是“您好,blueidea,您目前的身份是:注册用户”。
7. 检测用户的身份验证状态的LoginStatus控件
可以说是最简单的控件了。
<asp:LoginStatus id="LoginStatus1" runat="server" />
它包含两种状态:1)已登录到网站。2)已从网站注销。
当用户注销后,会给出一个“登录”的链接,用户可以点击这个链接来登录;当用户登录后,这个控件会自动转变为“注销”状态。
8. 为不同类别用户呈现不同内容的LoginView控件
全部登录控件都可以直接拿来用,不过,这一个我们来做更多一些东西。
<asp:LoginView id="LoginView1" runat="server">
<loggedintemplate>
<asp:LoginName id="LoginName1" runat="server" formatstring="您好,{0},您已经登录了。" />
</loggedintemplate>
<anonymoustemplate>
<asp:Label id="Label2" runat="server" text="您尚未登录,请"></asp:Label><asp:LoginStatus
id="LoginStatus1" runat="server" />
</anonymoustemplate>
<rolegroups>
<asp:RoleGroup roles="admin">
<contenttemplate>
<asp:LoginName id="LoginName1" runat="server" formatstring="您好,{0},您目前的身份是:管理员" />
<br />
您可以访问:<asp:HyperLink id="HyperLink1" navigateurl="User/Default.aspx" runat="server">User/Default.aspx</asp:HyperLink>
<br />
您也可以访问:<asp:HyperLink id="HyperLink2" navigateurl="Admin/Default.aspx" runat="server">Admin/Default.aspx</asp:HyperLink>
<br />
<asp:LoginStatus id="LoginStatus3" runat="server" />
</contenttemplate>
</asp:RoleGroup>
<asp:RoleGroup roles="member">
<contenttemplate>
<asp:LoginName id="LoginName1" runat="server" formatstring="您好,{0},您目前的身份是:注册用户" />
<br />
您可以访问<asp:HyperLink id="HyperLink1" navigateurl="User/Default.aspx" runat="server">User/Default.aspx</asp:HyperLink>
<br />
您不能访问<asp:HyperLink id="HyperLink2" navigateurl="Admin/Default.aspx" runat="server">Admin/Default.aspx</asp:HyperLink>
<br />
<asp:LoginStatus id="LoginStatus2" runat="server" />
</contenttemplate>
</asp:RoleGroup>
</rolegroups>
</asp:LoginView>
可以看到,这里包含了三个模板:LoggedInTemplate、AnonymousTemplate和RoleGroup的模板。如果定义了LoggedInTemplate模板,那么该用户会看到该模板内的内容,除非该用户属于另一个角色组,且该角色组在已在RoleGroups的模板中的定义。当匿名用户访问站点时,AnonymousTemplate内的内容会呈现给该用户。在前面我们配置的web.config中启用了角色,我们现在为admin角色定义一个模板,你可以在上面的代码中找到。
9. 更改密码的ChangePassword控件
如果更改密码,就使用它来修改。
<asp:ChangePassword id="ChangePassword1" runat="server">
</asp:ChangePassword>
不需要设置,就可以修改密码了。
10. 自助找回密码的PasswordRecovery控件
忘了密码怎么办,可以自已找回啦!不过,在些之前,web.config得另有配置。在system.web中的同级节点创建system.net节点,具体内容如下:
<system.net>
<mailsettings>
<smtp deliverymethod="Network" from="*@126.com">
<network defaultcredentials="false" host="smtp.126.com" password="*" port="25" username="*@126.com" />
</smtp>
</mailsettings>
</system.net>
我们使用了126的邮箱,其中的用户名与密码被省略。创建PasswordRecovery.aspx,放入PasswordRecovery控件。
<asp:PasswordRecovery id="PasswordRecovery1" runat="server">
</asp:PasswordRecovery>
测试:
打开注册时填写的邮箱就可以看到了。
我们就可以使用新的密码来登录站点了。
11. 总结
membership在接触之前,觉得比较神秘,在接触之后,发现其实也不难懂,而且与login系列控件配合得很完美。如果你想要快速搭建一个用户管理的平台,这是一个不错的选择,是偷懒者的首选。
如果你嫌MS的控件太难看,也没有关系,因为它又有多种多样的模板,通过自定义模板你就能实现你要看的界面。
不过,membership是设计得适合大多数的情况,所以也是一种万金油的做法,与你要的功能可能不完全符合,不过,学习一下它的做法,学习它数据库的设计,不也是一个好东西吗?
12. 直接使用Membership API
有时候,需要对成员身份进行更高级别(比 Web 站点管理工具或 Login 控件提供的控制级别高)的控制。在这些情况下,可以直接使用 Membership API。
Membership API 是通过 Membership 类公开的。Membership 类包含的方法使您能够完成以下工作:创建新用户;更改密码;搜索与特定条件匹配的用户等等。在幕后,Login 控件使用这些方法与已配置的成员身份提供程序进行交互。
下面列出了 Membership 类的一些比较重要的方法:
CreateUser — 使您能够创建新用户。
DeleteUser — 使您能够删除现有用户。
FindUsersByEmail — 使您能够检索与某个特定的电子邮件地址匹配的用户集合。
FindUsersByName — 使您能够检索与某个特定的用户名匹配的用户集合。
GeneratePassword — 使您能够生成随机密码。
GetAllUsers — 使您能够检索成员身份提供程序中存储的所有用户。
GetNumberOfUsersOnline — 使您能够返回当前正在访问 Web 应用程序的用户数。
GetUser — 使您能够检索与当前用户相关联的成员身份信息,或者使您能够检索与某个已经提供用户名的用户相关联的成员身份信息。
GetUsernameByEmail — 使您能够检索具有某个特定电子邮件地址的用户的用户名。
UpdateUser — 使您能够更新特定用户的信息。
ValidateUser — 使您能够根据成员身份提供程序对用户进行身份验证。
13. 会员供给者模型工作原理
ASP.NET 2.0使用一种新型的安全模型,称为会员供给者模型。这个模型通过使开发者能够选择添加安全特性到他们的应用程序的方式来允许最大程度的灵活性和扩展性。
作为这个供给者模型扩展性的一个实例,请考虑一下新的安全(登录)控件-你已在本文中看到过。这些控件、API以及构成该新模型的供给者显示于下图中。
图会员供给者模型:该图显示了本文所讨论的控件和会员供给者模型的各个层之间的关系。
在最顶层上是各种的Web服务器控件,例如Login、LoginStatus和LoginView控件。在该控件下面是API-它们执行要求其完成的任务。Membership类负责处理如添加和删除用户等的任务,而MembershipUser类负责管理用户的信息如口令、口令问题,等等。这些会员API使用会员供给者来保存或进行持续性存储。Visual Studio 2005与一个缺省的会员供给者一同发行-SQL Server 2005 Express Membership Provider。会员供给者的角色是充当会员API和数据存储之间的桥梁,以便信息能够被持续性存储而不需要开发者编写低层代码来存取数据。
如果微软提供的供给者不能满足你的需要,你或者可以扩展它们或者编写你自己的。例如,如果你想要用一个XML文档而不是一个关系数据库(例如SQLServer)来保存你的站点的会员信息,你可以编写你自己的供给者来实现与XML文件的对话。
14.Membership API的公共方法
Membership API的公共方法详见表18-3。在进行应用程序的身份验证过程时,要使用这个API。
表 18-3
Membership 方 法 说 明
CreateUser 在指定的数据库中添加新用户
DeleteUser 从数据库中删除指定的用户
FindUsersByEmail 返回一个用户集合,这些用户的电子邮件地址匹配给定的电子邮件地址
FindUsersByName 返回一个用户集合,这些用户的用户名匹配给定的用户名
GeneratePassword 生成指定长度的随机密码
GetAllUsers 返回数据库中包含的所有用户集合
GetNumberOfUsersOnline 返回一个整数,表示登录到应用程序中的用户数。给用户计数的时间窗口在machine.config或web.config文件中指定
GetUser 从数据库中返回某个用户的信息
GetUserNameByEmail 根据搜索的电子邮件地址,从数据库中提取特定记录的用户名
UpdateUser 在数据库中更新某个用户的信息
ValidateUser 返回一个布尔值,表示某组凭证是否有效
15 在注册过程中合并个性化属性
在第17章对个性化功能的介绍中,很容易使用ASP.NET 2.0中新的个性化管理系统,存储用户特定的信息。CreateUserWizard控件提供的注册过程非常适合于从用户处获取这些信息,来直接存储在个性化系统中。该获取过程可以放在代码中。
如上一章所述,首先是在应用程序的web.config文件中定义一些个性化信息,如程序清单18-7所示。
程序清单18-7 在web.config文件中创建个性化属性
<configuration>
<system.web>
<profile>
<properties>
<add name="FirstName" />
<add name="LastName" />
<add name="LastVisited" />
<add name="Age" />
<add name="Member" />
</properties>
</profile>
</system.web>
</configuration>
在web.config文件中定义了这些属性后,就可以使用它们在ASP.NET成员系统中创建用户了。使用CreateUserWizard控件可以创建一个过程,该过程的第一步要求用户输入他的用户名和密码,第二步输入一些自定义的个性化信息。程序清单18-8显示了完成该任务的CreateUserWizard控件。
程序清单18-8 使用个性化属性和CreateUserWizard控件
C#
<%@ Page Language="C#" %>
按照CreateUserWizard控件的默认实例定义的那样,对标准注册过程进行这些修改后,注册系统就包含了使用ProfileCommon对象存储属性的请求。然后用ProfileCommon. Initialize()方法初始化当前用户的属性值。接着通过ProfileCommon对象对配置属性进行强类型化的访问,以设置属性值。完成后,用Save()方法结束该过程。
可以在CreateUserWizard控件中使用<wizardsteps>元素定义一个定制的步骤。在这个元素中,可以利用所选的任何方式,构建一系列注册步骤。在<wizardsteps>块中,定义了3个步骤,如程序清单18-8所示。第一步是定制步骤,用<asp:WizardStep>控件请求终端用户的个性化属性。在<asp:Wizard Step="Step" >控件中,设置了一个表,创建了一个定制窗体。
程序清单18-7中定义了另外两步:使用<asp:CreateUserWizardStep>控件创建用户;使用<asp:CompleteWizardStep>控件确认新用户的创建。这些步骤的顺序就是它们显示给终端用户的顺序。
以希望的方式创建这些步骤后,就可以使用CreateUserWizard控件的CreatedUser事件存储定制属性:
Protected Sub CreateUserWizard1_CreatedUser(ByVal sender As Object, _
ByVal e As System.EventArgs)
Dim pc As ProfileCommon = New ProfileCommon()
pc.Initialize(CreateUserWizard1.UserName.ToString(), True)
pc.FirstName = Firstname.Text
pc.LastName = Lastname.Text
pc.Age = Age.Text
pc.Save()
End Sub
不仅可以在一个步骤中请求用户输入个人信息,还可以把这些项合并到<asp:Create UserWizardStep="UserWizardStep" >步骤中。一种简单的方法是切换到页面的设计视图上,打开CreateUserWizard控件的智能标记。然后单击Customize Create User Step链接,如图18-5所示。
图 18-5
单击Customize Create User Step,会在<asp:CreateUserWizardStep>控件的一个新块<contenttemplate>中详细列出这一步的内容。在<contenttemplate>元素中,使用一个完全默认的窗体来创建新用户。此时,可以自由修改该窗体,添加自己的块,请求终端用户输入其个人信息。在这个详细窗体中,也可以删除数据项。例如,如果不想请求用户输入安全性问答,就可以从窗体中删除这两个项(必须在成员提供程序定义中禁用问答请求)。通过修改这个默认窗体,可以为终端用户完全定制注册过程,如图18-6所示。
asp.net2.0中Membership的扩展
今天看了一下苏鹏老师的Membership扩展的webcast做的小例子。
如果使用vs2005提供的membership进行用户注册时,里面就那么几个字段,但是如果我们想着增加qq与msn字段,怎么办?有两种方法
1.利用profile,profile可以支持强类型和基本的数据类型;
2.在aspnetdb数据库中新建一张aspnet_userinfo表与aspnet_user通过username进行关联(按视频上来的,还没有测试)
一、利用profile
1.配置web.config
首先,要配置数据库链接字符串(sql2000)
<connectionstrings>
<add name="DYJ" connectionstring="Data source=".;Initial" catalog="aspnetdb;Persist" Security="Security" info="True;user" id="sa;password=123"" providername="System.Data.SqlClient"/>
</connectionstrings>
其次,membership和profile
<profile enabled="true" defaultprovider="profileProvider" >
<providers>
<add name="profileProvider" type="System.Web.Profile.SqlProfileProvider"
connectionstringname="DYJ" />
</providers>
<properties >
<add name="MSN" type="String"/>
<add name="QQ" type="String"/>
</properties>
</profile>
<membership>
<providers>
<remove name="AspNetSqlMembershipProvider" />
<add connectionstringname="DYJ" enablepasswordretrieval="false"
enablepasswordreset="true" requiresquestionandanswer="true"
applicationname="/" requiresuniqueemail="false" passwordformat="Hashed"
maxinvalidpasswordattempts="3" minrequiredpasswordlength="5"
minrequirednonalphanumericcharacters="0" passwordattemptwindow="10"
passwordstrengthregularexpression="" name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, version="2.0.0.0," culture="neutral," publickeytoken="b03f5f7f11d50a3a"" />
</providers>
</membership>
<rolemanager enabled="true" />
这是web.config的工作就完了,如果你没有配置aspnet_regsql则默认存放在sql2005 express数据库中,即你的网站的app_data下面的数据库文件中,如果你想修改可以使用aspnet_regsql工具进行配置。
2.开始编写代码(主要是cs文件,aspx界面代码主要是几个文本框和按钮)
protected void Button1_Click(object sender, EventArgs e)
{
MembershipCreateStatus ms;
MembershipUser newuser = Membership.CreateUser(Uname.Text, Upwd.Text, MSN.Text, SQ.Text, Ans.Text, true, out ms);
if (ms == MembershipCreateStatus.Success)
{
ProfileCommon p = (ProfileCommon)ProfileCommon.Create(newuser.UserName, true);
p.QQ = QQ.Text.Trim();
p.MSN = MSN.Text.Trim();
p.Save();
msg.Text = "OK";
Server.Transfer("default.aspx");
}
else
{
string errorcode;
switch (ms)
{
case MembershipCreateStatus.DuplicateUserName:
msg.Text = "Username already exists.";
break;
}
}
}
3.查看profile的信息
public DataTable listalluser()//可以绑定到GridView上
{
DataTable dt = new DataTable();
dt.Columns.Add("username", System.Type.GetType("System.String"));
dt.Columns.Add("QQ", System.Type.GetType("System.String"));
dt.Columns.Add("msn", System.Type.GetType("System.String"));
MembershipUserCollection members = Membership.GetAllUsers();
foreach (MembershipUser member in members)
{
DataRow dr = dt.NewRow();
MembershipUser mu = Membership.GetUser(member.UserName);
ProfileCommon p = Profile.GetProfile(member.UserName);
dr[0] = mu.UserName;
dr[1] = p.QQ;
dr[2] = p.MSN;
dt.Rows.Add(dr);
dt.AcceptChanges();
}
return dt;
}
下面两步实现的功能与2,3是一样的,只是实现的方式不一样。下面是利用vs2005提供的CreateUserWizard控件来实现,唯一值得注意的是,要将控件转化成模板,操作方法:点击右上角的智能箭头,选择“自定义创建用户步骤”,这样就可以加入文本框之类的控件进行操作。哈哈,简单吧,要不说现在的程序员不值钱了呢,工具软件越来越智能,越来越简单了啊,全都成傻瓜型的了!
4.加入Profile属性信息,注意事件,直接双击CreateUserWizard控件即可
protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
//TextBox qq = (TextBox)(this.CreateUserWizard1.FindControl("QQ"));
//虽然新加的文本框在ContentTemplate中而且看aspx代码与其他的控件也没有什么区别,但是通过上面的方法不能获取到TextBox的值,总是返回null,查了N久资料才找到下面的方法
TextBox qq =(TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("QQ");
TextBox msn = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("MSN");
ProfileCommon p =
(ProfileCommon)ProfileCommon.Create(CreateUserWizard1.UserName, true);
p.QQ= qq.Text;
p.MSN = msn.Text;
p.Save();
}
5.通过UserName来获取Profile的属性,由于Profile与aspnet_user表中的user_id绑定的,因此可以通过username来获取profile信息
protected void Button1_Click(object sender, EventArgs e)
{
//通过用户名来获取存储在profile表中的profile属性值
MembershipUser user = Membership.GetUser("teng_s2008");
ProfileCommon common = Profile.GetProfile("teng_s2008");
TextBox1.Text = common.MSN;
TextBox2.Text = common.QQ;
}
如果安照上面的步骤进行配置后,在数据库aspnetdb下面的表
aspnet_applications, aspnet_users, aspnet_profile, aspnet_Membership 中可以看到你刚才增加的记录。
aspnet_applications: 存储当前系统名称,一般为你解决方案的名称。
Aspnet_user: 存储注册的用户的一些信息,例如用户ID,名称。(其它自己看吧)
Aspnet_profile: 存储注册用户的一些个性化参数,ok,我们可以看到我们定义的Department, Project均出现在这个表中,他们被存储在一个字段,一行数据中,以一些分隔符区分。
Aspnet_membership: 存储注册用户的一些细节信息,类似密码等。
但是我作的时候配置了aspnet_regsql,user信息都可以在数据库中看到,但是profile不能看到而且app_data下面增加了那个看着就不爽的数据库文件,后来查了查MSDN,找到aspnet_regsql后面参数的含义,重新执行了一下,OK了。(由于具体操作不是太清楚,错了也别怪我啊!!)
aspnet_regsql -S (local) -U sa -P 123 -d aspnetdb -A p
S:服务器;U:用户名;P:密码;d:数据库;-A:add;p:profile
注意大小写
哈哈,现在已经OK了,另一种方法还没有测试,下班了回家了!数据库中已经有记录了新建一个aspnet_userinfo,但是由于表中有数据不能建立外键关联,以后有时间在接着写了!!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/maseccc/archive/2008/09/27/2982756.aspx