一定学会用Profile自定义配置文件

 Profile提供的功能是针对用户的个性化服务。在ASP.NET 1.x版本时,我们可以利用Session、Cookie等方法来存储用户的状态信息。然而Session对象是具有生存期的,一旦生存期结束,该对象保留的值就会失效。Cookie将用户信息保存在客户端,它具有一定的安全隐患,一些重要的信息不能存储在Cookie中。一旦客户端禁止使用Cookie,则该功能就将失去应用的作用。

Profile的出现解决了如上的烦恼,它可以将用户的个人化信息保存在指定的数据库中。ASP.NET 2.0的Profile功能默认支持Access数据库和SQL Server数据库,如果需要支持其他数据库,可以编写相关的ProfileProvider类。Profile对象是强类型的,我们可以为用户信息建立属性,即和该用户关联的一些类。如购物车啊,待处理的审批任务啊,等等。(这个是我在使用时的理解,不知道对不对哈)

要使用Profile的功能有以下几步:

1.配置:

<profile automaticSaveEnabled="false" defaultProvider="FirstProvider(默认的配置文件提供程序)">
   <providers>
要添加的自定义profile提供程序(如:购物车一个,待处理的审批任务一个)
    <add name="FirstProvider" connectionStringName="SQLProfileConnString" type="TestAppLication.MyProfileProvider" applicationName="TestAppLication"/>
    <add name="SecondProvider" connectionStringName="SQLProfileConnString" type="TestAppLication.MyProfileProvider" applicationName="TestAppLication"/>

   </providers>
   <properties>
下面是对应的自定义profile提供程序关联的属性
    <add name="MyCart" type="TestAppLication.Cart" allowAnonymous="true" provider="FirstProvider"/>
    <add name="MyTask" type="TestAppLication.Task" allowAnonymous="true" provider="SecondProvider"/>
   </properties>
  </profile>

以上设置可以配置和用户相关的两个功能。

2.重写ProfileProvider类。

(1)、重写Initialize这个函数,初始化自定义profile提供程序:

public override void Initialize(string name, NameValueCollection config) {

   if(config == null)
    throw new ArgumentNullException("config");
 
   if(string.IsNullOrEmpty(config["description"])) {
    config.Remove("description");
    config.Add("description", "MyProvider");
   }

   if(string.IsNullOrEmpty(name))
    name = "MyProfileProvider";
                   
   if(config["applicationName"] != null && !string.IsNullOrEmpty(config["applicationName"].Trim()))     
    applicationName = config["applicationName"]; 

   base.Initialize(name, config);

  }

(2)、重写GetPropertyValues和SetPropertyValues两个函数。其作用是获取和设置一个和当前用户相关的属性对象。

获取:
public override SettingsPropertyValueCollection GetPropertyValues(SettingsContext context, SettingsPropertyCollection collection) {

   string username = (string)context["UserName"];//当前访问用户
   bool isAuthenticated = (bool)context["IsAuthenticated"];//匿名用户还是正式用户

   SettingsPropertyValueCollection svc = new SettingsPropertyValueCollection();

   foreach(SettingsProperty prop in collection) {
    SettingsPropertyValue pv = new SettingsPropertyValue(prop);

    switch(pv.Property.Name) {
     case "MyCart":
      pv.PropertyValue = GetMyCart(username);//得到当前用户的购物车信息
      break;
     case "MyTask":
      pv.PropertyValue = GetMyTask(username);//得到当前用户的任务信息
      break;
     default:
      throw new ApplicationException("怎么会没有定义属性嘛!!");
    }

    svc.Add(pv);
   }
   return svc;
  }

设置:
public override void SetPropertyValues(SettingsContext context, SettingsPropertyValueCollection collection) {

   string username = (string)context["UserName"];
   bool isAuthenticated = (bool)context["IsAuthenticated"];
//将当前连接用户转换为用户ID
   int uniqueUserID = GetUniqueUserID(username);

 if(uniqueUserID == 0)
    uniqueUserID = CreateUser(username);

   foreach(SettingsPropertyValue pv in collection) {

    if(pv.PropertyValue != null) {
     switch(pv.Property.Name) {
      case "MyCart":
      SetMyCart(uniqueID, (MyCart)pv.PropertyValue);
       break;
      case "MyTask"
       SetMyTask(uniqueID, (MyTask)pv.PropertyValue);
       break;
      default:
       throw new ApplicationException("怎么会没有定义属性嘛!!");
     }
    }
   }
  }

(3)还要重写DeleteProfiles(包括重载的几个函数)、DeleteInactiveProfiles(删除没有活动的用户)、FindProfilesByUserName、FindInactiveProfilesByUserName(不活动的用户配置信息)、GetAllProfiles、GetAllInactiveProfiles(得到所有不活动用户的配置信息)、GetNumberOfInactiveProfiles

重写以上函数,将相应功能和对应的表联系起来,也就是Profile这个表的增、删、改

说明:MyCart、MyTask这个类就是购物车的相关逻辑,处理任务的相关逻辑。

3.使用自定义Profiles。

在ASP.NET页面直接用Profile.MyCart就可以得到当前连接用户的购物车信息。Profile.MyTask可以得到当前用户的待处理的任务信息。

当前连接用户添加购物车也很简单,如果MyCart类封装了一个Add(Modl.Cart)的话。我们直接这样:

Profile.MyCart.Add(Modl.Cart);
Profile.Save();

这样就行了,当然我们在配置里面要把automaticSaveEnabled="false"设置为"false"

执行Profile.Save()自动会执行我们重写的SetPropertyValues函数。

这样操作是不是很简单,操作也很清晰呢,也不会用到以前我们用的SESSION了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值