C#_Profile 配置

关键

  1、配置<system.web>元素下的<profile>元素;如果需要支持匿名的话则还需要配置<system.web>元素下的<anonymousIdentification>元素。示例如下,仅为说明:

<profile enabled="true" defaultProvider="SqlProfileProvider" inherits="CustomProfile">
   <providers>
    <add name="SqlProfileProvider" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
       connectionStringName="SqlConnectionString"
       applicationName="/" />
   </providers>
   <properties>
    <add name="Name" />
    <add name="Color" type="System.Drawing.Color" />
    <group name="Group">
     <add name="Collection" type="System.Collections.ArrayList" />
     <add name="Price" type="int" defaultValue="100" />
    </group>
   </properties>
  </profile>
  
  <anonymousIdentification
   enabled="true"
   cookieName=".VS2005_ANONYMOUS"
   cookieTimeout="1440"
   cookiePath="/"
   cookieRequireSSL="false"
   cookieSlidingExpiration="true"
   cookieProtection="All"
   cookieless="UseCookies" />

<profile>元素的inherits属性指定自定义类,该类要继承自ProfileBase

Profile是自动保存的,但是某些复杂类型可能无法自动保存,此时需要设置<profile>元素的automaticSaveEnabled设置为false,要保存的话则调用 Profile 上的 Save 方法即可。要动态取消Profile的自动保存功能的话则需要在 global.asax 中加一个Profile_ProfileAutoSaving事件,示例如下,仅为说明

void Profile_ProfileAutoSaving(Object sender, ProfileAutoSaveEventArgs e)
  {
    if ((e.Context.Items["CancelProfileAutoSave"] != null) && ((bool)e.Context.Items["CancelProfileAutoSave"] == true))
      e.ContinueWithProfileAutoSave = false;
  }

在需要取消Profile的自动保存功能的页的代码处如下写

protected void Page_Load(object sender, EventArgs e)
{
 Context.Items["CancelProfileAutoSave"] = true;  
}

2、通过ProfileManager执行相关任务,如搜索有关所有配置文件、经过身份验证用户的配置文件及匿名用户的配置文件的统计信息,确定在给定时间段内尚未修改的配置文件的数量,根据配置文件的上一次修改日期删除单个配置文件及多个配置文件等

3、将匿名配置文件迁移到经过身份验证的配置文件

在global.asax加一个Profile_MigrateAnonymous事件处理

void Profile_MigrateAnonymous(Object sender, ProfileMigrateEventArgs pe)
  {
   // 获得匿名配置
   ProfileCommon anonProfile = Profile.GetProfile(pe.AnonymousID);
  
   // 从匿名配置中取值并赋值给经过身份验证的配置
   if (anonProfile.Color != System.Drawing.Color.Empty)
   {
    Profile.Color = anonProfile.Color;
   }
    
   // 从数据库中删除匿名配置
   ProfileManager.DeleteProfile(pe.AnonymousID);
    
   // 清除与某个会话关联的匿名 Cookie 或标识符
   AnonymousIdentificationModule.ClearAnonymousIdentifier(); 
  }

示例

  App_Code/CustomProfile.cs

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
  
using System.Web.Profile;
  
/** <summary>
/// CustomProfile 的摘要说明
/// </summary>
public class CustomProfile : ProfileBase
{
  private string _customName;
  public string CustomName
  {
    get { return (string)base["CustomName"]; }
    set { base["CustomName"] = value; }
  }
  
  private bool _customSex;
  public bool CustomSex
  {
    get { return (bool)base["CustomSex"]; }
    set { base["CustomSex"] = value; }
  }
}

web.config

<profile enabled="true" defaultProvider="SqlProfileProvider" inherits="CustomProfile">
   <providers>
    <add name="SqlProfileProvider" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
       connectionStringName="SqlConnectionString"
       applicationName="/" />
   </providers>
   <properties>
    <add name="Name" />
    <add name="Color" type="System.Drawing.Color" />
    <group name="Group">
     <add name="Collection" type="System.Collections.ArrayList" />
     <add name="Price" type="int" defaultValue="100" />
    </group>
   </properties>
  </profile>
Profile/Test.aspx
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Test.aspx.cs"
  Inherits="Profile_Test" Title="存储用户配置测试" %>
  
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
  <asp:Label ID="lbl" runat="Server" />
</asp:Content>

Profile/Test.aspx.cs

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
  
public partial class Profile_Test : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    // 一看就懂
    Profile.Name = User.Identity.Name;
    Profile.Color = System.Drawing.Color.AliceBlue;
    Profile.Group.Collection.Clear();
    Profile.Group.Collection.Add("冰棍");
    Profile.Group.Collection.Add("瓜子");
    Profile.Group.Price = 999999;
  
    Profile.CustomName = User.Identity.Name;
    Profile.CustomSex = true;
  
    lbl.Text = "Name:" + Profile.Name + "<br />";
    lbl.Text += "Color:" + Profile.Color.ToString() + "<br />";
    foreach (string s in Profile.Group.Collection)
    {
      lbl.Text += "商品有:" + s + "<br />";
    }
    lbl.Text += "价格:" + Profile.Group.Price + "<br />";
  
    lbl.Text += "自定义类名字:" + Profile.CustomName + "<br />";
    lbl.Text += "自定义类姓名:" + Profile.CustomSex;
  }
}

用“abc”这个用户登录后的运行结果

  Name:abc

  Color:Color [AliceBlue]

  商品有:冰棍

  商品有:瓜子

  价格:999999

  自定义类名字:abc

  自定义类姓名:True

  注:需要用aspnet_regsql配置数据库

  OK

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值