在实际工作中,ASP.NET中的Session的定义和取消有时是分散的,工作组中的每个人定义Session的时候不一样,并且名称有随意性,所以做了一个Session的统一管理,便于Session的规范化。
代码如下:
1. 定义接口:只需要实现 ToString()即可。
1
|
//Interface for Session
|
2
|
public interface ISession {
|
2. Session 类
// ManagerInfo 是Model中的一个类,直接继承
|
// 将对象放入Session中时,该对象必须是可序列化的
|
public class LoginSession : ManagerInfo , ISession
|
public LoginSession(): base()
|
public string SessionID { get; set; }
|
public override int GetHashCode()
|
return SessionID.GetHashCode();
|
public override string ToString()
|
if (!string.IsNullOrEmpty(SessionID))
|
3. Session赋值
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的值
01
|
public static T GetGlobalSessionValue<T>(string _propertyName)
|
03
|
return GetSessionValue<T>(Common.Const.AppSetting.GlobalSessionName, _propertyName);
|
06
|
public static T GetSessionValue<T>(string _sessionName , string _propertyName)
|
08
|
T retVal = default(T);
|
09
|
string propertyName = _propertyName.ToLower();
|
11
|
if (Convert.ToString(HttpContext.Current.Session[_sessionName]) != "")
|
13
|
object SessionObject = (object)HttpContext.Current.Session[_sessionName];
|
15
|
if (SessionObject is ISession)
|
17
|
PropertyInfo[] propertyInfos = SessionObject.GetType().GetProperties();
|
19
|
foreach (var pi in propertyInfos)
|
21
|
string refName = pi.Name.ToLower();
|
22
|
if (propertyName == refName)
|
24
|
retVal = (T)pi.GetValue(SessionObject, null);
|
5. 在程序中可以这样取得Session中某一项的值:
string _tmpstr = Utilities.GetGlobalSessionValue<string>("username");
|
int _tmpint = Utilities.GetGlobalSessionValue<int>("pagesize");
|
Model.Manager = Utilities.GetGlobalSessionValue<Manager>("ManagerDetail");