• 温故知新ASP.NET 2.0(C#)(7) Profile(存储用户配置)


    [索引页]
    [源码下载]



    温故知新ASP.NET 2.0(C#)(7) - Profile(存储用户配置)


    作者:webabcd


    介绍
    ASP.NET 2.0 中的存储用户配置功能使您可以定义并存储要在整个应用程序中使用的基于用户的设置。而且,在用户未登录时,可以将这些设置存储在匿名配置文件中,然后在将来某个时间将其迁移到登录用户的配置文件中。


    关键
    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" />

    各属性详细说明参看MSDN,索引处查找“profile 元素”和“anonymousIdentification 元素”

    注意:
    <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
    [源码下载]
     
  • 相关阅读:
    [转] packagelock.json
    前端框架和技术
    typescript
    微信小程序登陆流程
    Introduction to my galaxy engine 4: Test on local light model
    Introduction to my galaxy engine 3: Local light model
    Introduction to my galaxy engine 5: Differed Lighting
    Introduction to my galaxy engine 2: Depth of field
    自己整理的一些国外免费3D模型网站,以后还会陆续添加
    Introduction to my galaxy engine 6: Differed Lighting 2
  • 原文地址:https://www.cnblogs.com/webabcd/p/653849.html
Copyright © 2020-2023  润新知