2011年1月13日 星期四

[asp.net] Session

一個專案裡面,可能後端用到的 Session 非常的多,或是模組切割之後,如果沒有有效的管理 Session ,凡舉
Session 名稱重複或是某個  SessionKey 值取出來是空值...等等,這類問題不僅增加程式撰寫的難度,也增加了
偵錯的盲點,所以也許我們可以考慮設計一個類別來管理。

我們設計一個類別,限制程式設計師只能透過這個類別對 Session 做存取的動作。

類別設計:

/// <summary>
/// MySession 類別。
/// </summary>
public class MySession {
private static TSession _TSession;
/// <summary>
/// Session 清單。
/// </summary>
public static TSession Item {
get {
if (_TSession == null) {
_TSession = new TSession();
}
return _TSession;
}
set {
_TSession = value;
}
}
}

/// <summary>
/// TSession 類別。
/// </summary>
public class TSession {
/// <summary>
/// Session 物件。
/// </summary>
/// <param name="SessionID">工作階段值得索引鍵名稱。</param>
public object this[string SessionID] {
get {
if (HttpContext.Current.Session[SessionID] == null) {
throw new Exception(string.Format("沒有[{0}]這個session值",SessionID));
}
else {
return HttpContext.Current.Session[SessionID];
}

}
set {
//若沒有該 Session 就儲存
if (HttpContext.Current.Session[SessionID] == null) {
HttpContext.Current.Session[SessionID] = value;
}
else {
//若該 Session 已經存在,檢查型別
if (HttpContext.Current.Session[SessionID].GetType().Equals(value.GetType())) {
HttpContext.Current.Session[SessionID] = value;
}
else {
throw new Exception(SessionID + " 型態不符合!");
}
}
}
}
}
 

測試頁面配置


2011-01-14_104744


頁面程式碼


2011-01-14_104909


 


狀況一:(測試 Session 型態不合) 先初始->重設 Session 型態不合


2011-01-14_105114


 


狀況二:(測試 Session 型態符合) 先初始->重設 Session 型態符合


2011-01-14_105304


 


注意:


程式碼中故意丟出錯誤訊息可以幫助程式設計師很快抓到錯誤,避免邏輯上的錯誤,當然設計類別的部分,只是一個概念,你也可以依照專案設計出更符合的實際需求類別。



HEMiDEMi 的標籤:

沒有留言:

張貼留言