在会话中存储对象

本文关键字:对象 存储 会话 | 更新日期: 2023-09-27 18:33:13

我需要在会话中保存一些东西。目前,我正在开发计算机上使用 InProc 会话,但我想使用 SQL Server 会话和 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 模块(中访问。

更改我的会话实现是否值得?对此的最佳实践是什么?

感谢您的建议。

在会话中存储对象

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

只有当它使您更容易使用时。

对此的最佳实践是什么?

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

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