当前位置:编程学习 > asp >>

ASP.NET 中的Session统一管理

在我的实际工作中,ASP.NET中的Session的定义和取消有时是分散的,工作组中的每个人定义Session的时候不一样,并且名称有随意性,所以做了一个Session的统一管理,便于Session的规范化。

代码如下:

1. 定义接口:只需要实现 ToString()即可。

view sourceprint?1 //Interface for Session 

2     public interface ISession { 

3         string ToString(); 

4     }

2. Session 类

view sourceprint?// ManagerInfo 是Model中的一个类,直接继承 

// 将对象放入Session中时,该对象必须是可序列化的 

 [Serializable] 

 public class LoginSession : ManagerInfo , ISession 

 { 

     public LoginSession(): base() 

     { 

         SessionID = ""; 

     } 

 

     public string SessionID { get; set; } 

 

     public override int GetHashCode() 

     { 

         return SessionID.GetHashCode(); 

     } 

 

     public override string ToString() 

     { 

         if (!string.IsNullOrEmpty(SessionID)) 

             return SessionID; 

         else

             return ""; 

     } 

 }

3. Session赋值

view sourceprint?1 LoginSession currentManager = new LoginSession(); 

2 currentManager.username="Admin"; 

3 currentManager.permission="all"; 

4 currentManager.SessionID = HttpContext.Current.Session.SessionID;<BR>HttpContext.Current.Session[AppSetting.GlobalSessionName] = currentManager; 

5 HttpContext.Current.Session.Timeout = 200;

4. 取得Session的值

view sourceprint?01 public static T GetGlobalSessionValue<T>(string _propertyName) 

02 { 

03     return GetSessionValue<T>(Common.Const.AppSetting.GlobalSessionName, _propertyName); 

04 } 

05  

06 public static T GetSessionValue<T>(string _sessionName , string _propertyName) 

07 { 

08     T retVal = default(T); 

09     string propertyName = _propertyName.ToLower(); 

10  

11     if (Convert.ToString(HttpContext.Current.Session[_sessionName]) != "") 

12     { 

13         object SessionObject = (object)HttpContext.Current.Session[_sessionName]; 

14  

15         if (SessionObject is ISession) 

16         { 

17             PropertyInfo[] propertyInfos = SessionObject.GetType().GetProperties(); 

18  

19             foreach (var pi in propertyInfos) 

20             { 

21                 string refName = pi.Name.ToLower(); 

22                 if (propertyName == refName) 

23                 { 

24                     retVal = (T)pi.GetValue(SessionObject, null); 

25                     break; 

26                 } 

27             }                    

28         } 

29     } 

30  

31     return retVal; 

32 }

5. 在程序中可以这样取得Session中某一项的值:

view sourceprint?string _tmpstr = Utilities.GetGlobalSessionValue<string>("username"); 

int _tmpint = Utilities.GetGlobalSessionValue<int>("pagesize"); 

Model.Manager = Utilities.GetGlobalSessionValue<Manager>("ManagerDetail");

 

补充:Web开发 , ASP.Net ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,