会话体系结构:单个站点范围的对象

时间:2014-03-04 13:42:44

标签: c# asp.net session session-variables

将会话变量全部存储在单个对象中是否可以?有什么缺点吗?

XSessionData SessionData
{
    get
    {
        string key = "XSessionData";
        if (HttpContext.Current == null)
            return null;
        if (HttpContext.Current.Session == null)
            return null;
        object data = HttpContext.Current.Session[key];
        if (data == null)
            HttpContext.Current.Session[key] = data = new XSessionData();
        return (XSessionData)data;
    }
}

1 个答案:

答案 0 :(得分:2)

没有技术理由说明你不能这样做。如果会话中的项目彼此相关,则可以是良好实践。我可以看到,如果您是依赖于Session的单元测试代码,则上述模式可能很有用。

但是,您应尽可能使用Session。你应该指定操纵Session的类,这样它就不会变成全局变化的全局状态。

但是,请记住,会话存储可能会发生变化。例如,某些对象在内存中可以正常工作,但在数据库会话存储中不起作用。

对于数据库会话存储,会话中保存的任何对象必须为Serializable

相关问题