ASP.NET 3.5核心编程学习笔记(9):用户配置文件
2011-10-13 14:38
856 查看
用户配置文件简介
在最抽象的层面,用户配置文件是一种由ASP.NET运行库组织到动态生成类中的属性集合。配置文件数据会按不同的用户分别保存。当程序运行页面被显示时,ASP.NET会动态创建配置文件对象,它包含开发者定义在数据模型中的相应类型的属性。该对象之后被添加到HttpContext对象中,可通过Profile属性获取。
数据模型的定义
为使用ASP.NET配置文件,我们需要先确定所要使用的数据模型结构,然后将该数据模型通过配置文件附在页面中。用户配置文件的布局定义在web.config文件中。
示例代码:
所有通过<add>标签添加的属性会变为动态创建类的成员。
配置文件中的用户配置会被自动生成一个类,如下所示:
该类的实例会自动与Page类的Profile属性相关联,我们可通过Profile.BackColor这类语法来访问用户配置文件的属性。
集合类型的使用
在上例中,我们使用的是单一的标量值,然后用户配置文件支持更高级的功能--集合类型和自定义类型。先看一下集合类型:
非标量值必须按存储介质的要求进行序列化。serializeAs属性就是用于指示如何进行序列化的。该属性可取的值有String、Xml、Binary、ProviderSpecific。如果该属性值未被指定,默认类型为String。
自定义类型的使用
只要自定义类型为可序列化类型,就能被用户配置文件所使用。我们可自己设计类,将其编译为程序集,然后将程序集名称添加到配置文件属性的类型信息中:
属性的分组
<properties>区段可接受<group>元素,它允许我们对之间相关的属性进行组织。
示例代码:
与页面的交互
为启用或禁用用户配置文件功能,我们只需设置web.config文件<profile>元素的enabled属性。如果该值为false,则页面不能使用Profile属性。
匿名用户的处理
虽然用户配置文件功能主要是为被验证用户设计的,但也能够存储匿名用户的配置文件数据。要启用匿名用户,首先要开启anonymousIdentification功能。
示例代码:
上述示例使匿名用户可设置背景颜色但不能设置前景颜色。
用户配置文件属性的访问
在请求被处理前,ASP.NET会根据web.config文件中定义的用户配置文件信息动态创建一个类,页面的Profile属性会被设置为该类的实例。
个性化相关事件
请求进入处理周期之前,个性化数据会被添加到某请求的HTTP上下文中,但哪个系统组件负责个性化数据的加载呢?为此,ASP.NET引入了一种新的模块ProfileModule。
该模块本身有一对事件,分别在请求被谁后和请求即将结束时引发。如果个性化功能被关闭,该模块会立即返回,否则它会向应用程序引发Personalize事件,并加载当前用户配置文件中的个性化数据。在Personalize事件被引发时,个性化数据尚未加载。由HTTP模块引发的事件处理程序必须编写在global.asax中。
匿名用户数据的迁移
通过分配给匿名用户唯一的ID,匿名用户也能存储和获取配置信息。但如果在某一时刻,该匿名用户决定在网站中创建一个帐户,就需要将其作为匿名用户时设置的配置信息迁移到新帐户上。
当用户以匿名身份转而登录实名帐户时,个性化模块会引发MigrateAnonymous事件。合理处理该全局事件,能将匿名用户的设置导入已验证用户的配置文件中。
示例代码:
用户配置文件提供程序
用户配置文件由两部分构成:访问层和存储层。
访问层提供了一个强类型模型,用于获取和设置属性值,还可以对用户身份进行管理。它会确保获取和存储的数据针对的是当前已登录的用户。
存储导使用特殊的提供程序来执行与存取数据有关的任务。
用户配置文件提供程序的配置
默认的提供程序由web.config文件描述相应功能区段的defaultProvider属性指定。默认情况下,如果未指定提供程序,将默认使用特定功能提供程序集合中的第一项。
默认配置文件提供程序名为AspNetSqlProfileProvider,使用SQL Server 2005 Express作为数据存储。如下所示:
上述代码摘自machine.config文件。这里的LocalSqlServer不是到本地或远程SQL Server实例的连接字串,而是配置文件<connectionStrings>区段中的数据项名称。
自定义的用户配置文件提供程序
我们可以编写自定义的用户配置文件提供程序,但自定义的用户配置文件提供程序类应继承于ProfileProvider类。
在最抽象的层面,用户配置文件是一种由ASP.NET运行库组织到动态生成类中的属性集合。配置文件数据会按不同的用户分别保存。当程序运行页面被显示时,ASP.NET会动态创建配置文件对象,它包含开发者定义在数据模型中的相应类型的属性。该对象之后被添加到HttpContext对象中,可通过Profile属性获取。
数据模型的定义
为使用ASP.NET配置文件,我们需要先确定所要使用的数据模型结构,然后将该数据模型通过配置文件附在页面中。用户配置文件的布局定义在web.config文件中。
示例代码:
<system.web> ...... <profile> <properties> <add name="BackColor" type="string" /> <add name="ForeColor" type="string" /> </properties> </profile> </system.web>
所有通过<add>标签添加的属性会变为动态创建类的成员。
配置文件中的用户配置会被自动生成一个类,如下所示:
namespace ASP { public class ProfileCommon : ProfileBase { public virtual string BackColor { get { (string)GetPropertyValue("BackColor"); } set { SetPropertyValue("BackColor", value); } } public virtual string ForeColor { get{ (string)GetPropertyValue("ForeColor"); } set{ SetPropertyValue("ForeColor", value); } } public virtual ProfileCommon GetProfile(string username) { object o = ProfileBase.Create(username); return (ProfileCommon)o; } ...... } }
该类的实例会自动与Page类的Profile属性相关联,我们可通过Profile.BackColor这类语法来访问用户配置文件的属性。
集合类型的使用
在上例中,我们使用的是单一的标量值,然后用户配置文件支持更高级的功能--集合类型和自定义类型。先看一下集合类型:
<properties> <add name="Links" type="System.Collections.Specialized.StringCollection" /> </properties>
非标量值必须按存储介质的要求进行序列化。serializeAs属性就是用于指示如何进行序列化的。该属性可取的值有String、Xml、Binary、ProviderSpecific。如果该属性值未被指定,默认类型为String。
自定义类型的使用
只要自定义类型为可序列化类型,就能被用户配置文件所使用。我们可自己设计类,将其编译为程序集,然后将程序集名称添加到配置文件属性的类型信息中:
<properties> <add name="ShoopingCart" type="My.Namespace.DataContainer, MyAssembly" /> </properties>
属性的分组
<properties>区段可接受<group>元素,它允许我们对之间相关的属性进行组织。
示例代码:
<properties> ...... <group name="Font"> <addd name="Name" type="string" defaultValue="verdana" /> <addd name="SizeInPoints" type="int" defaultValue="8" /> </group> </properties>
与页面的交互
为启用或禁用用户配置文件功能,我们只需设置web.config文件<profile>元素的enabled属性。如果该值为false,则页面不能使用Profile属性。
匿名用户的处理
虽然用户配置文件功能主要是为被验证用户设计的,但也能够存储匿名用户的配置文件数据。要启用匿名用户,首先要开启anonymousIdentification功能。
示例代码:
<system.web> ...... <anonymousIdentification enabled="true" /> <profile> <properties> <add name="BackColor" type="string" allowAnonymous="true" /> <add name="ForeColor" type="string" /> </properties> </profile> </system.web>
上述示例使匿名用户可设置背景颜色但不能设置前景颜色。
用户配置文件属性的访问
在请求被处理前,ASP.NET会根据web.config文件中定义的用户配置文件信息动态创建一个类,页面的Profile属性会被设置为该类的实例。
个性化相关事件
请求进入处理周期之前,个性化数据会被添加到某请求的HTTP上下文中,但哪个系统组件负责个性化数据的加载呢?为此,ASP.NET引入了一种新的模块ProfileModule。
该模块本身有一对事件,分别在请求被谁后和请求即将结束时引发。如果个性化功能被关闭,该模块会立即返回,否则它会向应用程序引发Personalize事件,并加载当前用户配置文件中的个性化数据。在Personalize事件被引发时,个性化数据尚未加载。由HTTP模块引发的事件处理程序必须编写在global.asax中。
void Profile_Personalize(object sender, ProfileEventArgs e) { ProfileCommon profile = null //如果当前用户为匿名用户,退出 if(User == null) return; //管理员用户 if(User.IsInRole("Administrators")) profile = (ProfileCommon)ProfileBase.Create("Administrator"); else profile = (ProfileCommon)ProfileBase.Create("User"); if(profile != null) e.Profile = profile; }
匿名用户数据的迁移
通过分配给匿名用户唯一的ID,匿名用户也能存储和获取配置信息。但如果在某一时刻,该匿名用户决定在网站中创建一个帐户,就需要将其作为匿名用户时设置的配置信息迁移到新帐户上。
当用户以匿名身份转而登录实名帐户时,个性化模块会引发MigrateAnonymous事件。合理处理该全局事件,能将匿名用户的设置导入已验证用户的配置文件中。
示例代码:
void Profile_MigrateAnonymous(object sender, ProfileMigrateEventArgs e) { //获取匿名用户配置文件 ProfileCommon anonProfile; anonProfile = Profile.GetProfile(e.AnonymousId); //迁移匿名用户配置文件到实名用户帐户上 Profile.BackColor = anonProfile.BackColor; ...... }
用户配置文件提供程序
用户配置文件由两部分构成:访问层和存储层。
访问层提供了一个强类型模型,用于获取和设置属性值,还可以对用户身份进行管理。它会确保获取和存储的数据针对的是当前已登录的用户。
存储导使用特殊的提供程序来执行与存取数据有关的任务。
用户配置文件提供程序的配置
默认的提供程序由web.config文件描述相应功能区段的defaultProvider属性指定。默认情况下,如果未指定提供程序,将默认使用特定功能提供程序集合中的第一项。
默认配置文件提供程序名为AspNetSqlProfileProvider,使用SQL Server 2005 Express作为数据存储。如下所示:
<profile> <providers> <add name="AspNetSqlProfileProvider" ConnectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Profile.SqlProfileProvider" /> </providers> </profile>
上述代码摘自machine.config文件。这里的LocalSqlServer不是到本地或远程SQL Server实例的连接字串,而是配置文件<connectionStrings>区段中的数据项名称。
自定义的用户配置文件提供程序
我们可以编写自定义的用户配置文件提供程序,但自定义的用户配置文件提供程序类应继承于ProfileProvider类。
相关文章推荐
- ASP.NET 3.5核心编程学习笔记(9):用户配置文件
- ASP.NET 3.5核心编程学习笔记(27):global.asax文件
- ASP.NET 3.5核心编程学习笔记(49):ASP.NET安全性之Forms身份验证
- ASP.NET 3.5核心编程学习笔记(38):自定义缓存依赖
- ASP.NET 3.5核心编程学习笔记(45):HTTP处理程序之高级编程
- ASP.NET 3.5核心编程学习笔记(23):Linq-to-SQL 数据的更新、事务、存储过程、函数
- ASP.NET 3.5核心编程学习笔记(26):HttpApplication对象
- ASP.NET 3.5核心编程学习笔记(29):HttpServerUtility类
- ASP.NET 3.5核心编程学习笔记:AJAX Web Service的调用
- ASP.NET 3.5核心编程学习笔记(47):ASP.NET的安全性之安全性上下文与信任级别
- ASP.NET 3.5核心编程学习笔记(7):单窗体、多窗体、跨页投递、重定向
- ASP.NET 3.5核心编程学习笔记(37):缓存的使用
- ASP.NET 3.5核心编程学习笔记(39):SQL Server缓存依赖
- ASP.NET 3.5核心编程学习笔记(40):页面缓存
- ASP.NET 3.5核心编程学习笔记(34):会话状态的使用
- ASP.NET 3.5核心编程学习笔记(44):HTTP处理程序的编写之从数据库加载图像
- ASP.NET 3.5核心编程学习笔记(11):SqlConnection、连接池
- ASP.NET 3.5核心编程学习笔记(14):DataAdapter
- ASP.NET 3.5核心编程学习笔记(18):数据绑定表达式
- ASP.NET 3.5核心编程学习笔记(28):HttpContext类