13.1 个性化设置基础
知识点讲解:光盘:视频\PPT讲解(知识点)\第13章\个性化设置基础.mp4
通常情况下,为了实现个性化设置功能,需要对用户的个性化配置信息提供配置和存储功能,并提出对应的个性化使用方式。在ASP.NET技术中,实现对Web站点个性化服务的操作步骤如下。
(1)识别用户身份。
(2)提供个性化服务体验。
(3)存储用户信息。
程序员根据上述操作步骤即可提出并实现对应的个性化方案。因为在ASP.NET中提供了专用的的个性化框架,所以只需掌握该框架中的3个核心功能即可实现个性化服务。3个核心功能的具体说明如下。
1.个性化用户配置
个性化用户配置是ASP.NET 2.0提供的一种实现为用户定义、存储和管理个性化配置信息的功能。在ASP.NET 2.0以前的版本中,要实现个性化功能需要编写大量的代码,通常的做法是将个性化信息存储在Session或数据库中,这样不仅需要编写大量的代码,而且不易于维护。从ASP.NET 2.0开始,可以直接使用提供的个性化用户配置快速实现需要的功能。
2.成员和角色管理
成员和角色管理是ASP.NET中提供的身份验证和授权功能,在ASP.NET 2.0以前的版本中,需要使用外部数据存储和Web.Config文件配置来实现。而从ASP.NET 2.0版本开始,除了继承传统的成员和角色管理功能外,还进行了如下3项功能的扩展。
- 新增了服务控件。
- 实现了站点用户管理。
- 实现了成员和角色管理。
3.Web部件
Web部件是一组集成控件,可以创建网站并使最终用户直接通过浏览器修改网页的内容、外观和行为。这些修改不但可以应用于网站上的所有用户,而且能够适用于个别用户。
ASP.NET中的个性化用户配置
个性化用户配置会将配置信息与单个用户关联,用户的数据存储在ASP.NET提供的数据库中,因此能够持久保存。但是在具体操作时需要注意如下4点。
- 存储的数据可以是与用户有关的数据,如背景颜色、数据显示的条数等。
- 所存储的数据可以是简单的数据类型,如String、Int等,也可以是开发人员自己定义的对象。
- 默认情况下支持的是注册用户,可以用显示声明allowAnonymous=true的方式来实现对匿名用户的支持。
- 默认情况下使用的数据库是SqlExpress,可以通过修改Web.Config文件中的ConnectionString属性和使用aspnet_regsql工具,实现对SqlServer 2000数据库的支持。
1.<profile>的详细配置
在使用ASP.NET中的个性化用户配置功能时,需要对Web.Config文件进行配置,在里面设置并定义跟用户存储和跟踪有关的配置信息。在Web.Config配置文件中,<profile>的基本结构如下。
<profile enabled="true|false"
inherits="fully qualified type reference"
automaticSaveEnabled="true|false"
defaultProvider="provider name">
<properties></properties>
<providers></providers>
</profile>
在上述结构中,包含了几个常用的属性、子元素和父元素,具体说明如下。
(1)属性
上述结构中包含如下4个属性。
- enabled:可选的Boolean属性,用于指定是否启用ASP.NET用户配置文件。如果值为True,则启用 ASP.NET 用户配置文件。默认值为True。
- defaultProvider:可选的String属性,用于指定默认配置文件提供程序的名称。默认值为 AspNetSqlProfileProvider。
- inherits:可选的String属性,包含从ProfileBase抽象类派生的自定义类型的类型引用。ASP.NET 动态地生成一个从该类型继承的ProfileCommon类,并将该类放在当前HttpContext的Profile属性中。
- automaticSaveEnabled:可选的Boolean属性,用于指定用户配置文件是否在ASP.NET页执行结束时自动保存。如果值为True,则用户配置文件在ASP.NET页执行结束时自动保存。只有在ProfileModule对象检测到某一用户配置文件已修改的情况下,也就是在IsDirty属性为True的情况下,该模块才保存该配置文件。默认值为True。
(2)父元素
上述结构中包如下2个父元素。
- configuration:用于指定公共语言运行库和.NET Framework应用程序所使用的每个配置文件中需要的根元素。
- system.web:为ASP.NET配置节指定根元素。
(3)子元素
上述结构中包含如下2个子元素。
- properties:必选的元素,用于定义用户配置文件属性和属性组的集合。
- providers:可选的元素,用于定义配置文件提供程序的集合。
另外,在上述<profile>结构中,properties 元素的使用格式要注意,具体格式如下。
<properties>
<add />
<clear />
<remove />
<group></group>
</properties>
上述格式中也包含对应的父、子元素,其中包含的父元素如下。
- configuration:指定公共语言运行库和.NET Framework应用程序所使用的每个配置文件中需要的根元素。
- system.web:为ASP.NET配置节指定根元素。
- profile:用于为应用程序配置用户配置文件。
包含的子元素如下。
- add:可选的元素,用于向用户配置文件添加属性。
- clear:可选的元素,用于从用户配置文件中清除以前定义的所有属性。
- group:可选的元素,用于定义用户配置文件属性的分组。
- remove:可选的元素,用于从用户配置文件中移除属性。
另外,profile中properties的add元素的使用格式也很重要,具体如下。
<add
name="property name"
type="fully qualified type reference"
provider="provider name"
serializeAs="String|Xml|Binary|ProviderSpecific"
allowAnonymous="true|false"
defaultValue="default property value"
readOnly="true|false"
customProviderData="data for a custom profile provider"
/>
上述格式中也包含了对应的父元素和属性,没有子元素,其中包含的属性如下。
- name:必选的String属性,用于指定属性名。该值用作自动生成的配置文件类的属性的名称,并用作该属性在Properties集合中的索引值。该属性的名称不能包含句点 (.)。
- type:可选的String属性,用于指定属性类型。默认值为String。
- provider:可选的String属性,用于指定用于存储和检索属性值的配置文件提供程序。provider属性的值是providers元素中指定的某个配置文件提供程序的名称。如果未指定提供程序名称,则使用profile元素中指定的默认提供程序。
- serializeAs:可选的SettingsSerializeAs属性,用于指定数据存储区中属性值的序列化格式。默认序列化格式视具体的提供程序而定。实际所使用的序列化格式由提供程序确定;对于SQL提供程序,则为String序列化。
- allowAnonymous:可选的Boolean属性,用于指定在应用程序用户是匿名用户的情况下是否可以获取或设置属性。如果其值设置为True,则在应用程序用户是匿名用户的情况下可以获取或设置属性。默认值为False。
- defaultValue:可选的String属性。如果数据存储区中没有Profile属性的值,则按如下规则指定默认值。
(1)如果使用XML序列化对属性(Property)类型进行了序列化处理,则此属性(Property)可以设置为表示属性(Attribute)类型的序列化实例的XML字符串。
(2)如果使用二进制序列化对属性(Attribute)类型进行了序列化处理,则此属性(Attribute)可以设置为表示属性(Attribute)类型的序列化实例的Base-64编码字符串。
(3)如果属性为引用类型,则可以使用Stringnull 值指示Profile 属性应为未初始化的配置文件返回Null。
- readOnly:可选的Boolean属性,用于指定是否只能读取而不能设置属性。如果其值设置为True,则可以读取但不可以设置属性。默认值为False。
- customProviderData:可选的String属性,用于指定customProviderData属性(Attribute)可以设置为任意字符串值,以供属性(Attribute) 的配置文件提供程序使用。如果设置了此属性 (Attribute),则该值放置在属性(Attribute)的Attributes集合中,通过名称“CustomProviderData”进行索引。
另外,profile中properties的clear 元素的使用格式如下。
<clear />
profile中properties的remove元素的使用格式如下。
<remove name="property name" />
其中,name是一个必选的String属性,用于指定要从集合中移除的属性定义的名称。
Profile中properties的group元素的使用格式如下。
<group name="group name">
<add />
<remove./>
</group>
其中包含了属性name,它是必选的String属性,代表属性组的名称。此值用作自动生成的组配置文件类的标识符。该组的名称不能包含句点“.”。
上述结构中,包含的子元素如下。
- add:可选的元素,用于向用户配置文件属性组中添加属性。
- remove:可选的元素,用于从用户配置文件属性组中移除属性。
Profile中group的add元素的使用格式如下。
<add
name="property name"
type="fully qualified type reference"
provider="provider name"
serializeAs="String|Xml|Binary|ProviderSpecific"
allowAnonymous="true|false"
defaultValue="default property value"
readOnly="true|false"
customProviderData="data for a custom profile provider"
/>
包含的各个属性的具体说明跟前面介绍的properties的add元素的相同,在此不再一一进行讲解。
profile的group的remove元素,具体格式如下所示。
<remove name="property name" />
其中属性name是必选的String属性,用于指定要从集合中移除的属性定义的名称。
profile的providers元素,具体格式如下所示。
<providers>
<add />
<remove/>
<clear/>
</providers>
包含的子元素如下所示。
- add:可选的元素,用于向配置文件提供程序的集合添加提供程序。
- clear:可选的元素,从配置文件提供程序的集合中移除提供程序。
- remove:可选的元素,从集合中清除以前定义的所有配置文件提供程序。
profile的providers的add元素,具体格式如下所示。
<add
name="provider name"
type="fully qualified type reference"
connectionStringName="connection string identifier"
commandTimeout="number of seconds before a command times out"
description="description of the provider instance"
applicationName="application name for stored profile information"
/>
包含的属性如下所示。
- name:必需的String属性,用于指定提供程序实例的名称。这是用于<profile>元素的defaultProvider属性的值,该值将提供程序实例标识为默认的配置文件提供程序。该提供程序的 name 还用于在Providers集合中对该提供程序进行索引。
- type:必需的String属性,用于指定实现ProfileProvider抽象基类的类型。
- connectionStringName:必需的String属性,用于指定在<connectionStrings>元素中定义的连接字符串的名称。指定的连接字符串将由正在添加的提供程序使用。
- applicationName:可选的String属性,用于指定数据源中存储配置文件数据的应用程序的名称。该应用程序名称使得多个ASP.NET应用程序能够使用同一个数据库,而不会遇到不同应用程序存在重复配置文件数据的情况。或者,通过指定相同的应用程序名称,多个ASP.NET应用程序可以使用相同的配置文件信息。如果未指定此属性 (Attribute),则.NET Framework附带的配置文件提供程序使用ApplicationName属性 (Property)的ApplicationVirtualPath值。
- commandTimeout:可选的Int32属性,用于指定在向成员资格数据源发出的命令超时之前等待的时间(以秒为单位)。SQL提供程序在创建SqlCommand对象时,使用该超时属性。默认情况下,ASP.NET 配置中并未设置该属性。因此,使用ADO.NET默认值30秒。如果设置了该属性,则SQL提供程序对向数据库发出的所有SQL命令使用已配置的超时值。默认值为30(ADO.NET 默认值)。
- description:可选的String属性,用于指定配置文件提供程序实例的说明。
profile的providers的remove元素,具体格式如下所示。
<remove name=" provider name" />
用于从用户配置文件提供程序集合中移除配置文件提供程序实例。其中包含了属性name,它是必选的String属性,要从集合中移除的配置文件提供程序对象的名称。
profile的providers的clear元素,具体格式如下所示。
<clear/>
用于从用户配置文件提供程序集合中移除所有配置文件提供程序实例。
2.API配置自定义用户属性
在ASP.NET中,除了上节中介绍的<profile>配置个性化信息外,还可以通过对API的配置来实现个性化功能,此种方式需要访问命名空间System.Web.Profile。在System.Web.Profile命名空间包含的类,可以用于在Web服务器应用程序中实现ASP.NET用户配置文件。
ASP.NET配置文件用于在数据源(如数据库)中存储和检索用户设置。配置文件信息和属性值是使用配置文件提供程序管理的,可以使用 SqlProfileProvider 类存储在Microsoft SQL Server数据库中,也可以使用ProfileProvider抽象类的实现存储在自定义数据源中。
在ASP.NET中,配置文件是使用profile配置节实现配置的。在启用用户配置文件的应用程序时,ASP.NET会创建一个类型为ProfileCommon的新类,该类从ProfileBase类继承。将强类型访问器添加到profile配置节点中,目的是定义ProfileCommon类中的每个属性。类ProfileCommon的一个实例,通常被设置为当前HttpContext对象的profile属性的值。可以创建一个自定义配置文件实现,该实现从ProfileBase抽象类继承,并为profile配置元素中未指定的用户配置文件定义相应的属性。System.Web.Profile中包含的各类信息如表13-1所示。
表13-1 System.Web.Profile中包含的类
类 |
说 明 |
---|---|
CustomProviderDataAttribute |
为配置文件属性的提供程序提供自定义数据的字符串 |
DefaultProfile |
在未定义配置文件属性时表示用户配置文件实例 |
ProfileAutoSaveEventArgs |
为ProfileModule类的ProfileAutoSaving事件提供数据 |
ProfileBase |
提供对配置文件属性值和信息的非类型化访问 |
ProfileEventArgs |
为ProfileModule类的Personalize事件提供数据 |
ProfileGroupBase |
提供对分组的ASP.NET配置文件属性值的非类型化访问 |
ProfileInfo |
提供关于用户配置文件的信息 |
ProfileInfoCollection |
ProfileInfo对象的集合 |
ProfileManager |
管理用户配置文件数据和设置 |
ProfileMigrateEventArgs |
为ProfileModule类的MigrateAnonymous事件提供数据 |
ProfileModule |
管理用户配置文件和配置文件事件的创建。无法继承此类 |
ProfileProvider |
定义ASP.NET为使用自定义配置文件提供程序提供配置文件服务而实现的协定 |
ProfileProviderAttribute |
为用户配置文件属性标识配置文件提供程序 |
ProfileProviderCollection |
继承ProfileProvider抽象类的对象的集合 |
SettingsAllowAnonymousAttribute |
标识某个配置文件属性是否可由匿名用户设置或访问 |
SqlProfileProvider |
对ASP.NET应用程序的配置文件信息在SQL Server数据库中的存储进行管理 |
System.Web.Profile中包含的各委托信息如表13-2所示。
表13-2 System.Web.Profile中包含的委托
委 托 |
说 明 |
---|---|
ProfileAutoSaveEventHandler |
表示将要处理ProfileModule的Profil AutoSaving事件的方法 |
ProfileEventHandler |
表示将要处理ProfileModule的Personalize事件的方法 |
ProfileMigrateEventHandler |
表示将要处理ProfileModule类的MigrateAnonymous事件的方法 |
另外,System.Web.Profile中还包含了一个枚举ProfileAuthenticationOption,用于描述要搜索的用户配置文件的身份验证类型。
表13-1中的各个类是ASP.NET个性化配置处理的核心,其使用方法和原理都比较简单,具体信息读者可以登录 http://msdn.microsoft.com/zh-cn/library/system.web.profile(VS.80).aspx 来获取各个类、枚举和委托的使用方法。
3.SQL Server数据库配置
在默认情况下,当第一次执行与用户配置有关的应用程序时,系统将自动为该应用程序创建一个SQL Server 2005 Express的特定数据库实例。该数据库实例保存在应用程序根目录下的App_Data文件夹中,名称为“ASPNETDB.MDF”。该数据库将默认包括存储用户配置属性数据的数据表,以及其他与实现用户配置功能相关的对象等。对于使用SQL Server 2005实施开发的人员来讲,只需要配置好 Web.Config文件,并正确调用profile属性和ProfileManager类即可,而无须关心如数据库表设计与维护等工作。目前应用程序多使用SQL Server 2000或SQL Server 2005来实施存储,在这种情况下必须对数据库进行预先配置,然后才能正确使用个性化用户配置功能。
个性化用户配置中配置SQL Server数据库的操作步骤如下。
(1)假设C盘是当前计算机的系统盘,ASP.NET的版本号是v4.0.30319,则可以在命令行中输入如下命令。
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regsql.exe
此时将运行aspnet_regsql.exe,并自动弹出一个安装向导窗口,如图13-1所示。
图13-1 安装向导窗口
(2)单击【下一步】按钮,弹出“选择安装项”页面,在此选择第一项“为应用程序配置SQL Server”,如图13-2所示。
图13-2 选择安装项
(3)单击【下一步】按钮,弹出“选择服务器和数据库”界面,在此依次输入数据库登录数据并选择数据库,如图13-3所示。
图13-3 选择服务器和数据库
(4)单击【下一步】按钮,弹出“请确认您的设置”界面,如图13-4所示。
图13-4 确认设置
经过上述操作后,自动生成一个名为“aspnetdb”的数据库,如图13-5所示。
图13-5 生成“aspnetdb”数据库
在数据库“aspnetdb”中包含了个性化服务所需要的表、视图和角色。
数据库创建完成后,还需要对对应的配置文件进行修改,以实现将用户的配置数据存储到SQL Server数据库中。方法是将文件“machine.config”中的连接代码修改为自己的连接字符串,具体实现代码如下。
<connectionStrings>
<add name="aspnetdb" connectionString="data source=HP;Integrated UID=sa;PWD=888888" providerName="System. Data.SqlClient" />
</connectionStrings>
文件“machine.config”位于“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG”目录下。然后打开此目录下的“web.config”文件,在<connectionStrings>中设置连接字符串,在<profiles>中设置数据源名,具体实现代码如下。
<connectionStrings>
<add name="aspnetdb" connectionString="data source=HP;Integrated UID=sa;PWD=888888" providerName="System. Data.SqlClient" />
……
</connectionStrings>
<profiles>
<providers>
<clear/>
<add name="aspnetdb" connectionStringsName=" aspnetdb "
Type=”System.Web.Profile.SqlProfileProvider” />
</profiles>