综述:Profile用户设置文件的作用是为了存储用户个人独特的数据,Profile设置文件要能够运行必须要先识别用户身份,无论是通过验证还是匿名,只要是具备唯一识别用户的能力后就可以将用户的信息存储在Profile相关的数据表中,简单的说,Profile的功能是结合Login组件的功能使用的,在Login组件是见得的记录了用户的关键的信息,主要是用户名、密码、邮箱、安全问题、问题答案五个问题及用户角色的相关问题,但是关联一个用户的其他信息,例如星座、血型等基本信息则是存储在Profile文件的。
一、定义Profile用户文件
若要为网站加入Profile用户设置文件只需在Web.config文件中设置即可:
<system.web>
<profile>
<properties>
<add name="country" type="System.String"defaultValue="中国"></add>
//有些属性是可以固定存储的,例如上面的国家的属性就固定为“中国”
<add name="性别"type="System.String"></add>
<addname="星座" type="System.String"></add>
<add name="学历"type="System.String"></add>
</properties>
</profile>
</system.web>
二、添加特定用户的Profile信息
在经过用户的身份验证之后可以通过以下的方式添加用户的信息:
Profile.性别 = TextBox1.Text.Trim();
Profile.星座 =TextBox2.Text.Trim();
Profile.学历 =TextBox3.Text.Trim();
Profile.Save();//保存用户的相关信息
三、读取用户的相关信息
在数据库中,用户的Profile文件信息是通过下面的样式进行存储的:
(1)可以通过下面的方式进行用户的Profile文件信息的读取:
if (!IsPostBack)
{
ProfileCommon userProfile=Profile.GetProfile(Membership.GetUser().ToString());
//获取当前用户的相关信息,主要是获取用户名称
Label1.Text = userProfile.性别;
Label2.Text = userProfile.星座;
Label3.Text = userProfile.学历;
}
(2)此外还可以针对Profile中所定义的字段来做群分类以方便管理,如上述的Country、City等字段可将它们分类到Address(地址)群,以后只要通过Profile.Address的Intellisense就能够调用到上述字段,设置如下:
调用的方式如下:
Label5.Text = userProfile.Address.city +userProfile.Address.age.ToString();
四、Profile用户设置文件的运作原理
在这个运作过程牵扯到三个主要的类:
|
Profile类、ProfileCommom类、ProfileBase类,这三个类在读取用户的Profile文件的时候有如下的关系:
五、更新Profile用户设置文件
Profile.性别 =TextBox1.Text.Trim();
Profile.星座 =TextBox2.Text.Trim();
Profile.学历 =TextBox3.Text.Trim();
Profile.Save();//此处的Save操作是更新操作,而不是保存操作
六、读取全部用户的Profile设置文件
(1)将所有用户的名称绑定到dropdownlist之后,要在dropdownlist的选项改变后触发的事件发生需要将dropdownlist的autopostback属性设置为“true”;
(2)编写dropdownlist的SelectedIndexChanged事件,将选择的用户的Profile文件信息绑定到gridview的数据源:
ProfileCommon userProfile =Profile.GetProfile(DropDownList1.SelectedItem.Text);
if(ProfileCommon.Properties.Count >= 0)
{
DataTabletable = new DataTable();
table.Columns.Add("Profile属性名称", typeof(string));
table.Columns.Add("Profile属性值", typeof(string));
DataRowsingleRow;
singleRow =table.NewRow();
singleRow["Profile属性名称"] = "用户名称";
singleRow["Profile属性值"] = userProfile.UserName;
table.Rows.Add(singleRow);
singleRow =table.NewRow();
singleRow["Profile属性名称"] = "星座";
singleRow["Profile属性值"]= userProfile.星座;
table.Rows.Add(singleRow);
GridView1.DataSource = table;
GridView1.DataBind();
前台文件:
后台文件:
六、针对网站的匿名用户的Profile文件的信息
(1)对于网站的匿名用户的信息不在是隐形的,网站可以正常的记录网站的匿名用户的GUID码,也就是匿名用户的唯一的识别码,但是默认的情况是不记录的,需要在配置文件启用这个功能:
(
2)记录匿名用户的基本信息,显示的用户的信息如下:
(
3)存储和使用匿名用户的Profile设置文件,前提条件是a.anonymousIdentification必须设置为true(也就是启用匿名用户的Profile功能);b.Profile字段的属性也必须设置allowAnonymous为true;
数据库的存储形式如下:
七、匿名用户的Profile文件信息的迁移(Migration)
(1)在全局文件global.ascx文件添加转移事件
全局文件的代码如下:
<%@ ApplicationLanguage="C#" %>
<script runat="server">
voidApplication_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
}
voidApplication_End(object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码
}
voidApplication_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码
}
voidSession_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码
}
voidSession_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。
}
voidProfile_MigrateAnonymous(object sender, ProfileMigrateEventArgs args)
{
ProfileCommonanonymousProfile = Profile.GetProfile(args.AnonymousID);
//将匿名用户的个人爱好转移到登陆者的个人爱好
if(!string.IsNullOrEmpty(anonymousProfile.个人爱好))
{
Profile.个人爱好 =anonymousProfile.个人爱好;
Profile.Save();
}
//删除匿名用户的Profile
ProfileManager.DeleteProfile(args.AnonymousID);
//清除匿名用户的Cookies或身份资料
AnonymousIdentificationModule.ClearAnonymousIdentifier();
}
</script>
这样就可以将匿名用户的某些选择添加到后来登录的用户的名下,例如当匿名用户登录网站将某些商品放入到自己的购物车,在借款时就可以将这些商品转移到自己的用户名称下。
八、ProfileModule类
该类是用于用户Profile的创建与Profile事件的管理的,其运作原理为当ASP.NET的Profile为启用状态时,ASP.NET使用ProfileModule类创建用户Profile,并将它存储在目前的HttpContext的Profile属性中,而其管理的事件主要有三个:MigrateAonnymous(匿名者Profile迁移事件)、Personalize(Profile的个性化事件)、ProfileAutoSaving事件。
至于各个事件的具体功能可详细查看信息。