中),也可以按照 实现配置文件提供程序 主题中描述的那样创建并使用自己的配置文件提供程序。可以指定连接到所选的数据库的 SqlProfileProvider 实例,也可以使用将配置文件数据存储在本地 Web 服务器上的默认 SqlProfileProvider 实例。
1.配置文件属性的用户标识
ASP.NET 用户配置文件功能设计为提供当前用户的独有信息。配置文件可由通过身份验证的用户使用,也可以由匿名(未经身份验证)用户使用。
1.通过身份验证的用户
默认情况下,用户配置文件与当前 HTTP 上下文(可通过 HttpContext..::.Current 属性访问)的 User 属性中存储的用户标识关联。用户标识可通过以下几方面确定:
ASP.NET Forms 身份验证系统,该系统在身份验证成功之后设置用户标识。
Windows 或 Passport 身份验证,此功能在身份验证成功之后设置用户标识。
自定义身份验证,对用户凭据的获取和用户标识的设置进行手动管理。
ASP.NET Forms 身份验证需要创建登录窗体并提示用户提供凭据。使用 ASP.NET 登录控件,无需编写任何代码即可创建登录窗体并执行 Forms 身份验证。有关使用 ASP.NET 功能对用户进行身份验证的信息,请参见 ASP.NET 登录控件概述 和 使用成员资格管理用户。有关 Forms 身份验证的信息,请参见如何:实现简单的 Forms 身份验证。
1.匿名用户
配置文件还可由匿名用户使用。默认情况下,并不会启用匿名配置文件支持,因此必须显式启用。此外,当在 Web.config 文件中定义配置文件属性时,必须将其显式定义为可由匿名用户单独使用。由于配置文件可能设计为由通过身份验证的用户使用,并且许多属性可能包含匿名用户不可用的个人信息,因此默认情况下配置文件属性并不支持匿名访问。
如果启用了匿名标识,则用户首次访问站点时,ASP.NET 将为其创建一个唯一标识。该唯一用户标识存储在用户计算机上的 Cookie 中,这样,对于每个页请求,其用户都可以得到标识。Cookie 的默认有效期设置为大约 70 天,当用户访问站点时会定期对其进行更新。如果用户的计算机不接受 Cookie,则可将该用户的标识作为请求的页 URL 的一部分来维护(尽管用户关闭浏览器时该标识会丢失)。
有关启用匿名标识的信息,请参见 anonymousIdentification 元素(ASP.NET 设置架构)。
1.迁移匿名配置文件信息
在有些情况下,您的应用程序最初可能维护着匿名用户的个性化设置信息,但最后该用户登录到了您的应用程序中。在这种情况下,该用户的标识会从分配的匿名用户标识更改为身份验证进程提供的标识。
当用户登录(即不再是匿名用户)时,将引发 MigrateAnonymous 事件。如果有必要,可以对此事件进行处理,以便将信息从用户的匿名标识迁移到新的通过身份验证的标识。下面的代码示例演示用户通过身份验证时如何迁移信息。
public void Profile_OnMigrateAnonymous(object sender, ProfileMigrateEventArgs args)
{
ProfileCommon anonymousProfile = Profile.GetProfile(args.AnonymousID);
Profile.ZipCode = anonymousProfile.ZipCode;
Profile.CityAndState = anonymousProfile.CityAndState;
Profile.StockSymbols = anonymousProfile.StockSymbols;
////////
// Delete the anonymous profile. If the anonymous ID is not
// needed in the rest of the site, remove the anonymous cookie.
ProfileManager.DeleteProfile(args.AnonymousID);
AnonymousIdentificationModule.ClearAnonymousIdentifier();
// Delete the user row that was created for the anonymous user.
Membership.DeleteUser(args.AnonymousID, true);
}
1.定义配置文件属性
可以选择为各个属性定义以下附加特性:
type 指定属性的类型。默认为 String。可以将任何 .NET 类指定为类型(Int32、DateTime、StringCollection 等)。如果 .NET Framework 中没有定义该类型,则必须确保 Web 应用程序可以访问该类型。可以在网站的 Bin 目录中或全局程序集缓存 (GAC) 中包含该类型编译后的程序集,也可以将该类型的源代码放入网站的 App_Code 目录中。
serializeAs 指定序列化格式化程序(字符串、二进制、XML 或提供程序特定的序列化)。有关详细信息,请参见序列化。默认序列化为字符串。
allowAnonymous 指定一个布尔值,该布尔值指示是否为匿名用户托管属性。默认情况下,该属性为 false。如果希望未经身份验证的用户使用该属性,则可以将该属性设置为 true。
defaultValue 指定属性初始化时使用的值。
readOnly 指定一个布尔值来指示属性是否可修改。
provider 指定特定于属性的提供程序。默认情况下,使用为配置文件属性指定的默认提供程序对所有属性进行管理,但个别属性也可以使用不同的提供程序。
customProviderData 指定一个包含自定义信息的可选字符串,该字符串将被传递给配置文件提供程序。各个提供程序可实现自定义逻辑来使用此数据。
在本文的开头已经讲了基本型别的属性如何定义。在这里主要再讲讲自定义类型的属性。下面的代码示例说明一个简单的 ShoppingCart 类,该类维护 Cart 项的集合,而这些项存储项标识符、名称和成本:
[Serializable]
public class ShoppingCart {
public DateTime Created;
public DateTime LastUpdated;
public Dictionary<string, CartItem> CartItems = new Dictionary<string, CartItem>();
}
[Serializable]
public class CartItem {
public CartItem(int itemId, string itemName, double itemCost)
{
ID = itemId;
Name = itemName;
Cost = itemCost;
}
int ID;
string Name;
double Cost;
}
若要配置用户配置文件以使用此类的存储实例,请向应用程序的 Web.config 文件中添加以下内容:
<profile defaultProvider="AspNetSqlProfileProvider">
<properties>
<add name="MyCart" type="Samples.AspNet.Profile.ShoppingCart" serializeAs="Binary" />
</properties>
</profile>
若要将自定义类型数据存储到用户配置文件中,如同在任何应用程序中一样,创建自定义类型的一个实例,然后将该实例分配给为该类型定义的配置文件属性。下面的代码示例演示如何使用一个以自定义类型创建的配置文件属性:
ShoppingCart bookCart = new ShoppingCart();
bookCart.CartItems.Add("Contoso", new CartItem(37843, "Widget", 49.99));
bookCart.CartItems.Add("Microsoft", new
CartItem(39232, "Software", 49.99));
Profile.MyCart = bookCart;
1.ASP.NET 配置文件提供程序
2.默认配置文件提供程序
ASP.NET 包含一个使用 Microsoft SQL Server 存储数据的配置文件提供程序。默认的 ASP.NET 计算机配置包含一个名为 AspNetSqlProfileProvider 的 SqlProfileProvider 默认实例,该实例连接至本地计算机上的 SQL Server。默认情况下,ASP.NET 配置文件功能使用提供程序的此实例。或者,可以在应用程序的 Web.config 文件中指定一个不同的默认提供程序。
一般情况下,不建议使用默认。
1.自定义配置文件提供程序
在下列情况下创建自定义配置文件提供程序:
需要在 .NET Framework 包含的配置文件提供程序不支持的数据源中存储配置文件信息,如在 FoxPro 数据库或在 Oracle 数据库中。
需要使用不同于 .NET Framework 包含的提供程序所使用的数据库架构来管理配置文件信息。常见示例是希望将配置文件信息与现有 SQL Server 数据库中的用户数据相集成。
例子见:(VS.90).aspx
1.将配置文件信息与 ASP.NET 一起使用
参考:(VS.90).aspx