【发布时间】:2011-01-03 08:33:21
【问题描述】:
如果这个问题已经被问过,请原谅我。 HttpContext.Current.Session["key"] 返回一个对象,我们必须将其转换为特定的 Type 才能使用它。我正在研究类型化会话的各种实现
http://www.codeproject.com/KB/aspnet/typedsessionstate.aspx http://weblogs.asp.net/cstewart/archive/2008/01/09/strongly-typed-session-in-asp-net.aspx http://geekswithblogs.net/dlussier/archive/2007/12/24/117961.aspx
如果我们想将新的Type 对象添加到会话中,无论是作为方法还是作为单独的包装器,我觉得我们需要向 SessionManager 添加更多代码(如果我错了,请纠正我)。我认为我们可以使用泛型
public static class SessionManager<T> where T:class
{
public void SetSession(string key,object objToStore)
{
HttpContext.Current.Session[key] = objToStore;
}
public T GetSession(string key)
{
return HttpContext.Current.Session[key] as T;
}
}
-
有什么先天优势吗? 使用
SessionManager<ClassType>.GetSession("sessionString")
比使用
HttpContext.Current.Session["sessionString"] as ClassType
- 我也觉得会很好 有类似的东西
SessionManager["sessionString"] = objToStoreInSession,
但发现静态类不能有索引器。有没有其他方法可以做到这一点?
-
我的想法是创建一个 SessionObject 来存储
Type和对象,然后使用密钥将此对象添加到 Session(使用 SessionManager)。检索时,将所有对象转换为SessionObject,获取类型(比如t)和对象(比如obj)并将obj转换为t并返回。public class SessionObject { public Type type {get;set;} public Object obj{get;set;}
}
这也不好用(因为返回签名相同,但返回类型不同)。
是否有任何其他优雅的方式以更安全的方式在会话中保存/检索对象
【问题讨论】:
标签: asp.net session session-state session-variables