用户个性化管理.ppt
第19章 用户个性化管理,个性化机制为用户提供了保存自定义设置的机制,使用该机制可以为用户保存特定的个性化信息。在MSDN中,个性化又称配置文件。ASP.NET的个性化机制将在后台自动的处理个性化数据的更新,而且个性化使用强类型的属性来保存和获取这些个性化性。为了使用个性化,ASP.NET须要获取唯一的用户标识,以便用户在再次访问时能够识别,并根据需要应用用户的个性化设置。,19.1 使用个性化,个性化与本书前面章节谈论过的ASP.NET状态管理最大的不同在于个性化被用于永久存储个性化性息,可以是SQL Server或其他数据存储。在ASP.NET中,可以使用Profile对象来存取个性化信息,Profile对象了提供了一种强类型的持久化的用户会化信息。,19.1.1 配置个性化提供者,个性化与Membership一样,使用提供者程序设计模型,默认情况下个性化使用SqlProfileProvider存储个性化数据。SqlProfileProvider将使用默认的ASPNET.MDF存储个性化性息,本小节将讨论通过配置SqlProfileProvider来使用自定义的数据库。与Membership的配置一样,需要先使用aspnet_regsql.exe命令行工具配置指定的数据库,该工具将创建个性化用户数据所必须的表、视图和存储过程。下面的命令行代码将为本机上的Northwind数据库添加个性化数据表:aspnet_regsql.exe-d Northwind-A p-E,19.1.2 定义个性化属性,当使用aspnet_regsql.exe配置数据库后,添加了一个名为aspnet_Profile的表用来存储个性化信息。在实际的存储之前,须要先定义个性属性。要添加属性需要在配置节中使用元素定义属性。在该元素内部,可以使用标签添加特定的个性化属性。标签中可以定义多个参数,比如指定属性类型等,但是至少要提供了一个属性名称。在下面的配置代码中定义了四个名称,分别表示姓名、工作、爱好和书籍,如下所示:,19.1.3 使用个性化属性,因为个性化存储用户特定的信息,在默认情况下,需要经过验证的用户才能够读取和写入个性化信息。可以使用任何类型的验证方式来验证用户,在添加验证前,添加一些规则以避免未经授权的用户访问页面或文件夹。为了演示个性化属性的使用,本小节新建一个ProfileDemo.aspx的网站,在web.config文件中按前面小节中的内容配置了个性化提供者,并添加下面的配置代码使用Forms验证方式,指定禁止所有匿名用户访问。,19.1.4 使用个性化组,如果应用程序中需要使用的大量的个性化信息,可以将个性化分为一个或者是多个组,这样例于个性化属性的组职与管理。在web.config中要配置组,只需要添加一个配置节,该节内部添加子元素即可,例如下面的代码为本上一小节的示例添加了一个BookInfo的组,配置如下所示:,19.1.5 个性化和自定义数据类型,可以在个性化属性中存储自定义数据类型,比如创建了一个自定义类。在ASP.NET中这非常容易,只需要创建一个类,指定序列化属性。自定义类可以是位于App_Code文件夹中的类或者是位于DLL中的己经编译好的类。例如下面的示例创建了一个简单的Book类,在类级别,指定Serializable特性,Book类的代码如下所示:Serializablepublic class Book public string BookName get;set;public string ISBN get;set;public decimal Price get;set;public string Publisher get;set;public Book()public Book(string _bookname,string _isbn,decimal _price,string _publisher)BookName=_bookname;ISBN=_isbn;Price=_price;Publisher=_publisher;,19.1.6 匿名用户个性化,默认情况下,匿名用户不能修改个性化属性。但是在一些时候,需要为匿名的用户创建一些临时的个性化信息,比如大多数电子商务系统都允许用户在注册前向购物车添加商品,此时需要为匿名的用户提供唯一识别的功能。ASP.NET提供了一个匿名识别的特性可以满足这个需求。这个特性可以为匿名用户自动的生成一个随机的标识符。这个随机生成的标识符将被用来在数据库中存储用户信息。因此即使没有可用的用户ID,也可以追踪客户端的信息。客户端将在Cookie或者是URL中保存跟踪信息,如果会话丢失或者网络中断,匿名用户会话将丢失,并且一个新的匿名会话会被创建。,19.1.7 迁移匿名个性化信息,当匿名用户登录进入系统之后,可以迁移用户在匿名时保存的匿名个性化信息。比如电子商务网站,用户或许在登录前己经在购物车中放了一些商品,当用户登录进行结算时,应该将用户在登录前选择的商品,一并拷贝到登录后的用户个性化中。ASP.NET提供了ProfileModule.MigrateAnonymous事件,只要匿名识别有效且当前用户被验证时,就会触发该事件。可以在Global.aspx中处理该事件。当运行启用了用户配置文件的应用程序时,ASP.NET会创建一个从ProfileBase类继承的类型为ProfileCommon的类,强类型访问器被添加到profile配置节中为每个属性定义的ProfileCommon 类中。GetProfile方法使您能够根据用户名检索ProfileCommon对象。可以使用当前经过身份验证的配置文件的GetProfile方法来检索匿名配置文件的属性值。然后可以将匿名属性值复制到已验证身份的用户的当前配置文件中。,19.1.8 创建自定义个性化类,除了在web.config配置文件中添加一系列的个性化属性之外,还可以将个性化属性定义在一个单独的类中,便于修改维护。下面定义一个PersonnalProfile的类,该类用于保存一些个人信息,代码如下所示:using System;using;/BookProfile 的摘要说明/public class PersonnalProfile:ProfileBase SettingsAllowAnonymous(true)public string ChineseName get;set;SettingsAllowAnonymous(true)public string PersonnalFavor get;set;SettingsAllowAnonymous(true)public int PersonnalAge get;set;SettingsAllowAnonymous(true)public string PersonnalWork get;set;,19.1.9 自动保存个性化信息,对于简单类型的个性化属性来说,ASP.NET会在页执行周期结束时自动保存个性化信息。但是对于复杂类型的个性化属性来说,ASP.NET则没有办法确定复杂类型的内容是否己经改变。ASP.NET提供了一个方法,只要访问复杂类型的属性值,ASP.NET都会将该复杂类型的Profile.IsDirty属性值设为True,换言之,如果只是读取复杂类型中的一些信息也会认为改变了复杂类型的值。因此在页面执行结束时也会自动的进行保存。在页面执行结束时时保存个性化是一件非常昂贵的操作,ASP.NET提供了两种方法用于控制一个复杂类型的个性化属性的保存。,19.2 小结,本章讨论了自ASP.NET 2.0起引入的个性化特性,首先讨论了如何配置个性化提供者,讨论了如何配置SQL Server数据库使其支持存付储个性化。接下来讨论了如何在web.config配置文件中定义个性化属性,并举例演示了如何应用个性化属性。接下来的内容讨论了个性化组,如何个性化自定义的数据类型,然后介绍了匿名用户个性化功能以及匿名用户个性化迁移的功能。最后讨论了如何创建自定义的个性化类,以及如何处理个性化类的自动保存问题。,