0

我需要在会话中保存一些东西。目前,我在我的开发机器上使用 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 模块)中访问。

改变我的会话实现是否值得?这方面的最佳做法是什么?

感谢您的建议。

4

2 回答 2

1

改变我的会话实现是否值得?

仅当它使您更易于使用时。

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

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

于 2012-05-05T14:04:33.287 回答
1

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

于 2012-05-05T14:04:42.433 回答