在会话中存储对象

时间:2012-05-05 14:00:46

标签: c# asp.net

我需要在会话中保存一些内容。目前,我在我的开发机器上使用InProc会话,但我想使用SQL服务器会话,然后使用Azure的AppFabric会话进行部署。

我创建了一个包含多个属性的对象,所有属性都是基本类型。我正在处理这样的会话阅读:

SessionObject TheCurrentSession = 
    HttpContext.Current.Session["UserAppSession"] as SessionObject;

基本上,我将会话变量包装在每次会话加载和保存时被序列化和反序列化的对象中。

我想知道以原生格式存储每个属性并将包装对象作为本机类型读取/保存在会话中的每个属性会更好。

例如,我有一个名为RecreateSession的方法,如下所示:

public class SessionObject
{
   public void RecreateSession()
   {
        this.SessionObjectProperty1 = 
                         HttpContext.Current.Session["SessionObjectProperty1"];
        this.SessionObjectProperty2 = ...;
        this.SessionObjectProperty3 = ...;
   }
}

我认为这样做会阻止序列化/反序列化过程,并且可以直接在代码的其他部分(即HTTP模块)中访问这些值。

更改会话实施是否值得?这方面的最佳做法是什么?

感谢您的建议。

2 个答案:

答案 0 :(得分:1)

  

更改会话实施是否值得?

只有这样才能让您更容易使用。

  

这方面的最佳做法是什么?

你几乎已经在做了。创建一个单个对象来保存几个相关属性(可能一起使用)并将其存储在会话中而不是一堆单独的会话属性是有道理的。

答案 1 :(得分:1)

我总是创建一个自定义对象,其中每个属性引用一个特定的会话项......我认为它是最好的选择。