Profile(存储用户配置)

转载 2007年09月25日 00:17:00
重新过一遍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 _customName; }
        
set { _customName = value; }
    }


    
private bool _customSex;

    
public bool CustomSex
    
{
        
get return _customSex; }
        
set { _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配置数据库
 

相关文章推荐

使用ASP.NET 2.0 Profile存储用户信息

  • 2015年05月07日 20:34
  • 3.86MB
  • 下载

使用ASP.NET 2.0 Profile存储用户信息[翻译] Level 200

作者: Stephen Walther 原文地址:http://msdn.microsoft.com/asp.net/default.aspx?pull=/library/en-us/dnvs05/...

ssh整合项目存储用户登录信息

  • 2009年04月30日 19:33
  • 17KB
  • 下载

mysql存储用户表结构的系统表

1.获取mysql所有表结构的sql语句: select * from information_schema.tables; 2.获取表字段的sql语句 select * from inform...

PHP Session变量,实现session服务器端存储用户信息,阻止未登录跳转主页

session的作用:是用来在服务器端存储用户信息,当浏览器关闭的时候,会自动销毁。...

存储用户信息案例

本案例介绍了如何使用文件存储数据,以及从文件中读取数据。我们这个案例的基本布局如下: activity_main.xml:...

视频电商网站 - 使用localStorage存储用户信息(一)

localStorage基本要点1、一般支持5M左右的大小(各个浏览器还是有差别) 2、不建议存储太多内容(目前都是字符串存储和读取) 3、关键信息请加密(一般是后台加密,前台可以做保存)浏览器支...

如何使用iOS Keychain存储用户敏感信息

iOS的keychain服务提供了一种安全的保存私密信息(密码,序列号,证书等)的方式,每个ios程序都有一个独立的keychain存储。相对于NSUserDefaults、文件保存等一般方式,key...

如何安全的存储用户的密码

据说,现在的彩虹表已经能够破解8位长度的任意md5hash......每一个用户,每一个密码都要使用不同的盐。用户每次创建账户或者修改密码都要使用一个新的随机盐。永远不要重复使用盐。盐的长度要足够,一...

使用keyChain存储用户敏感信息

iOS的keychain服务提供了一种安全的保存私密信息(密码,序列号,证书等)的方式,每个ios程序都有一个独立的keychain存储。相对于NSUserDefaults、文件保存等一般方式,key...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Profile(存储用户配置)
举报原因:
原因补充:

(最多只允许输入30个字)