将会话变量全部存储在单个对象中是否可以?有什么缺点吗?
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;
}
}
答案 0 :(得分:2)
没有技术理由说明你不能这样做。如果会话中的项目彼此相关,则可以是良好实践。我可以看到,如果您是依赖于Session
的单元测试代码,则上述模式可能很有用。
但是,您应尽可能使用Session
。你应该指定操纵Session
的类,这样它就不会变成全局变化的全局状态。
但是,请记住,会话存储可能会发生变化。例如,某些对象在内存中可以正常工作,但在数据库会话存储中不起作用。
对于数据库会话存储,会话中保存的任何对象必须为Serializable
。