如果这个问题已经被问过,请原谅我。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;}
}
这将无法正常工作(因为返回签名将相同,但返回类型将不同)。
是否有任何其他优雅的方式以更安全的方式在会话中保存/检索对象