技术开发 频道

温故知新ASP.NET 2.0(C#)(7) - Profile(存储用户配置)


【IT168技术文档】

介绍
  ASP.NET 2.0 中的存储用户配置功能使您可以定义并存储要在整个应用程序中使用的基于用户的设置。而且,在用户未登录时,可以将这些设置存储在匿名配置文件中,然后在将来某个时间将其迁移到登录用户的配置文件中。


关键
  1、配置<system.web>元素下的<profile>元素;如果需要支持匿名的话则还需要配置<system.web>元素下的<anonymousIdentification>元素。示例如下,仅为说明
<profile enabled="true" defaultProvider="SqlProfileProvider" inherits="CustomProfile"> <providers> <add name="SqlProfileProvider" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="SqlConnectionString" applicationName="/" /> </providers> <properties> <add name="Name" /> <add name="Color" type="System.Drawing.Color" /> <group name="Group"> <add name="Collection" type="System.Collections.ArrayList" /> <add name="Price" type="int" defaultValue="100" /> </group> </properties> </profile> <anonymousIdentification enabled="true" cookieName=".VS2005_ANONYMOUS" cookieTimeout="1440" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All" cookieless="UseCookies" />
  各属性详细说明参看MSDN,索引处查找“profile 元素”和“anonymousIdentification 元素”

注意:
  <profile>元素的inherits属性指定自定义类,该类要继承自ProfileBase

  Profile是自动保存的,但是某些复杂类型可能无法自动保存,此时需要设置<profile>元素的 automaticSaveEnabled设置为f alse,要保存的话则调用 Profile 上的 Save 方法即可。要动态取消Profile的自动保存功能的话则需要在 global.asax 中加一个Profile_ProfileAutoSaving事件,示例如下,仅为说明
void Profile_ProfileAutoSaving(Object sender, ProfileAutoSaveEventArgs e) { if ((e.Context.Items["CancelProfileAutoSave"] != null) && ((bool)e.Context.Items["CancelProfileAutoSave"] == true)) e.ContinueWithProfileAutoSave = false; }
  在需要取消Profile的自动保存功能的页的代码处如下写
protected void Page_Load(object sender, EventArgs e) { Context.Items["CancelProfileAutoSave"] = true; }
  2、通过ProfileManager执行相关任务,如搜索有关所有配置文件、经过身份验证用户的配置文件及匿名用户的配置文件的统计信息,确定在给定时间段内尚未修改的配置文件的数量,根据配置文件的上一次修改日期删除单个配置文件及多个配置文件等

  3、将匿名配置文件迁移到经过身份验证的配置文件
  在global.asax加一个Profile_MigrateAnonymous事件处理,示例如下,仅为说明
void Profile_MigrateAnonymous(Object sender, ProfileMigrateEventArgs pe) { // 获得匿名配置 ProfileCommon anonProfile = Profile.GetProfile(pe.AnonymousID); // 从匿名配置中取值并赋值给经过身份验证的配置 if (anonProfile.Color != System.Drawing.Color.Empty) { Profile.Color = anonProfile.Color; } // 从数据库中删除匿名配置 ProfileManager.DeleteProfile(pe.AnonymousID); // 清除与某个会话关联的匿名 Cookie 或标识符 AnonymousIdentificationModule.ClearAnonymousIdentifier(); }
0
相关文章