ASP.NET 2.0 Framework提供了一种可选的不同于cookie和Session状态的方式存储用户信息:Profile对象。Profile对象提供强类型、可持久化的Session状态表单。
可以在应用程序的根Web配置文件定义一组Profile属性来创建Profile。ASP.NET Framework在后台动态编译一个包含这些属性的类。
例如,代码清单3-19所示的Web配置文件定义了一个Profile包含了三个属性:firstName、lastName和numverOfVisits。
代码清单3-19 Web.config
当定义Profile属性时,可以使用下面的属性:
q name——用于指定属性名称;
q type——用户指定属性类型。类型可以是任意类型,包括定义在App_Code文件夹中的自定义组件(默认值是字符串类型);
q defaultValue——用于指定属性默认值;
q readOnly——用于创建只读属性(默认值为false);
q serializeAs——用于指定一个属性如何持久化为静态持久化数据。可能的值有Binary、ProviderSpecific、String和Xml(默认值为ProviderSpecific);
q allowAnonymous——用于允许匿名用户读写属性(默认值为false);
q provider——用于关联属性到特定的Profile提供程序;
q customProviderData——用于传递自定义数据到Profile提供程序。
在Web配置文件中定义Profile后,可以使用Profile对象修改Profile属性。例如,代码清单3-20所示的页面使用一个表单修改firstName和lastName属性的值。并且,页面在每次被请求时自动更新numberOfVisits属性
代码清单3-20 ShowProfile.aspx
注意,Profile属性被公开为强类型属性。例如,numberOfVisits属性被公开为一个整型属性,因为我们将其定义为一个整型属性。
理解Profile属性是持久化的非常重要。如果为一个用户设置Profile属性,那么就算该用户过500年也不会再返回网站,属性也会保留其值。不像Session状态,当为Profile属性赋值时,用户离开网站,值也不会消失。
Profile对象使用提供程序模型。默认的Profile提供程序是SqlProfileProvider。默认情况下,该提供程序保存Profile数据到名为ASPNETDB.mdf的Microsoft SQL Server 2005 Express数据库,保存在应用程序的App_Code文件夹。如果数据库不存在,第一次使用Profile对象时它会被自动创建。
默认情况下,不能为匿名用户保存Profile信息。ASP.NET Framework使用用户的身份认证标识关联Profile信息。对任何标准的ASP.NET Framework支持的身份验证方式,都可以使用Profile对象,包括表单身份认证和Windows身份认证(默认情况下,Windows身份验证被启用)。
注解 本节的后续部分,你将了解到如何为匿名用户保存Profile信息。