在会话中存储对象
本文关键字:对象 存储 会话 | 更新日期: 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 模块(中访问。
更改我的会话实现是否值得?对此的最佳实践是什么?
感谢您的建议。
更改我的会话实现是否值得?
只有当它使您更容易使用时。
对此的最佳实践是什么?
你几乎已经在做这些了。创建单个对象来保存多个相关属性(可能一起使用(并将其存储在会话中而不是一堆单独的会话属性是有意义的。
我总是创建一个自定义对象,其中每个属性都引用一个特定的会话项......我认为这是最好的选择。