刺客11顶级足球鞋评测:什么是asp.net的profile

来源:百度文库 编辑:中财网 时间:2024/04/27 18:38:54
        “用户配置文件”是Profile这个词的直接翻译,其实没有文件的意思,默认存储在数据库中,不用自己管理文件。 Profile是针对每个帐户的数据存储,比如一个电子商务网站的用户购物车数据。
Profile是HttpContext类的一个属性,是ProfileBase类,继承自SettingsBase类。 所谓Provider,是你可以定义Profile如何存储,默认是存储在LocalServer数据库中,需要网站重启动不丢失数据,所以不能存在内存中。 web.config中必须的Profile属性:什么叫必须?你如果不修改默认存储,只有每个Profile的name是必须的,如: //修改存储才需要 //用户配置的项目才是必须的
Profile...用户配置文件...从Win98开始Windows就引入了这一概念...用于多用户系统的用户个性化配置管理... 
ASP.NET中的Profile也是同样的概念...它和Membership协同工作...但和Membership却不是一回事... 
-----------MSDN------------------ 
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 配置元素中未指定的用户配置文件定义相应的属性。 
-----------MSDN------------------

    ASP.NET 2.0 中新增的 Profile 功能。

   .NET Framework SDK 的文档中有这样一段话,位于 System.Web.Profile.ProfileBase 类的首页上:

在启动启用了用户配置文件的应用程序时,ASP.NET 会创建一个类型为 ProfileCommon 的新类,该类从ProfileBase 类继承。强类型访问器被添加到 profile 配置节中为每个属性定义的 ProfileCommon 类中。ProfileCommon 类的强类型访问器调用 ProfileBase 基类的 GetPropertyValue 和 SetPropertyValue方法,分别用于配置文件属性值的检索和设置。ProfileCommon 类的一个实例被设置为 ASP.NET 应用程序的 Profile 属性的值。

   为了启用 Profile 机制,我们需要在 web.config 中进行必要的配置。比如:

                                                                                    

上面的 Profile 配置,数据将被存储在 TestDB 这个 ConnectionString 所代表的那个数据库中。Profile 中添加了三个 properties:一个是 PreferredLang,代表用户最喜欢的界面语言;一个是 PreferredTheme,代表用户最喜欢的 ASP.NET 主题;一个是 RecordsPerPage,表示如果启用分页,每页显示的记录条数。注意最后一个指定了类型 int。

下面按照我说的步骤做:找一个 *.aspx.cs 文件(如果你没有用 Code-Behind,则直接在 *.aspx 的 script runat="server" 块中),比如在它的 Page_Load 方法中,输入 Profile,把鼠标放上去,你看到了什么?

比如当前这个画面的类名叫 Abc,你通过智能感知看到的应该是 “ProfileCommon Abc.Profile”,表示这个 Profile 类型是 ProfileCommon,是当前类的一个属性。

如果你继续敲一个点,你会发现这个类具有 PreferredLang (string 类型),PreferredTheme (string 类型),RecordsPerPage (int 类型)。恰好和你在 web.config 中的配置是一致的。

如果你有兴趣,可以在 Profile.PreferredLang 的后半部分,右击,“Go To Definition”,你会看到这个 ProfileCommon 的代码,当然这些代码也是自动生成的。这个 ProfileCommon 类从 ProfileBase 类继承,在基类基础上根据 web.config 的配置,添加了三个属性。

看到这里,最开头那段话的意义就明了了。

但我这篇的重点,并不在于 ProfileCommon 类本身,因为有了 DataSet 的基础,这个 ProfileCommon 也比较容易理解。我想请各位读者关注一下这个 Abc.Profile 属性。

无论是使用单文件 aspx 还是 Code-Behind 机制的 aspx/aspx.cs 双文件,我们都没有显式声明过、一个名称叫做 Profile、类型为 ProfileCommon 的属性。而且在页面的基类 Page 中,更是找不到踪影。那么这个属性是从哪儿来的?

这也是 ASP.NET 2.0 中内置的一个 BuildProvider 的作用。

ASP.NET Profile属性

作用:
存储和使用唯一与用户对应的信息
展现个人化版本的Web应用程序
用户的唯一身份标识在再次访问时识别用户

ASP.NET Profile如何工作

你的Web应用程序运行时,ASP.NET创建一个从ProfileBase类动态继承下来的动态生成出来的ProfileCommon类。动态ProfileCommon类包含了你在Web应用程序配置文件中指定的Profile属性所拥有的字段。一个动态ProfileCommon类的实例被设置成了当前HttpContext的Profile属性,并可以在应用程序的各个页面中使用。

ASP.NET属性的用户身份

ASP.NET用户Profile特性被设计用来为唯一当前用户提供信息。Profile可以与认证用户和匿名用户同时使用。

认证用户

默认地,一个用户Profile与当前HTTP上下文(可通过System.Web.HttpContext.Current访问)中的User属性中存储的用户身份关联。用户身份由如下因素决定:

·           ASP.NET表单审核系统,成功审核后设置用户身份。
·           Windows或者Passport审核,成功审核后设置用户身份。
·           自定义审核,你管理用的信用凭证并手动设置用户身份。

ASP.NET表单审核包括创建一个Login表单并提示请求用户凭证。你可以通过使用Login控件创建Login表单和实现无编码的表单审核。

匿名用户

当你未经过登陆而在Web应用程序中浏览时,持有和使用的是匿名用户身份。这种用户身份的用户名是一个GUID字符串。可以通过用户迁移方法的重载将匿名用户转变为审核用户,实际上是为匿名用户生成Profile和相应的Cookie,不过维持的状态保存在本地电脑,如果Cookie过期或者使用其它电脑就可能导致信息丢失。

开发相关问题:

ASP.NET Profile属性使用Form审核机制,通过Cookie维持状态,可以保证不受会话超时影响,当然也可以设定为Sliding Expire。ASP.NET Profile属性所持有身份Cookie的超时时间需要在Web.config文件中的forms元素上设置timeout属性,有值的区间限制,不过可以通过设置一个较大的值来维持一个“永久”的Profile。其实Cookie超时时间过长是有安全隐患的,不过为了满足一些需求只好使用这种方法,但记得要加密Cookie并尽量使用SSL连接保持Cookie的安全性。

ASP.NET Profile属性的相关字段和Provider需要在Web.config文件中进行设置。而关键在于Provider,默认使用的是轻量级数据库(本地数据库文件)来支持Profile属性,但是如果是企业级开发,注意需要使用aspnet_regsql命令去生成数据库,当然这个数据库可以是已经存在的数据库,方便开发者开发已存在系统的身份验证和审核功能。

ASP.NET Profile的另一个功能是因为数据库存储了Web应用服务器的各个Web应用程序的根和与其对应的身份,所以也被用来实现SSO。