剛剛接觸.net web端的朋友都會被session坑過,莫名其妙的不能讀取session資料,後來知道原來有irequiressessionstate這個介面,不繼承的就不能讀取session裡面的資料,知道這個以後呢,也不清楚裡面具體是如何實現的。對此一直不甘心,於是查了各方面的資料終於模擬出來了。
在一般處理程式(ashx檔案)裡面有個乙個(httpcontext context),f12進入httpcontext 類你面你會發現它應該是用了單例的模式,裡面有個 public static httpcontext current ,應該是確定程式只有乙個上下文。接下來可以找到public httpsessionstate session ,這就是我們需要讀取session。
廢話少說,首先說明用到了反射。我們來介紹下type 類中的type isassignablefrom(type c);方法。假設a類繼承了b介面, type a = typeof(a); type b = typeof(b); 那麼 a. isassignablefrom(b)的值為ture;這個可以判斷類是否繼承了irequiressessionstate。這是第一步。
第二步就是找到當前訪問session的類。這個就要用到stacktrace類,從名字上來看這個類是用來跟蹤**的。這裡面要用到stacktrace 的getframe(index)方法和getmethod(); 。getframe(index)這個是從呼叫的最裡層往外層遍歷,它的返回值也是stacktrace 。是getmethod() 返回值是methodbase,而methodbase的reflectedtype屬性可以得到當前類的type。
原理都在上面的,下面的**是模擬過程。
using system;using system.diagnostics;
using system.reflection;
using system.web.sessionstate;
namespace ztest
else
}catch (exception ex)
console.readline();}}
public class test
i++;
}boolean key = basetype.isassignablefrom(type);
if (key)
else
}private static test _current;
private string _m = "當前類實現了irequiressessionstate";
/// /// 模擬session
///
public object session
public static test current
set}
private static test get()
return _current;}}
}
Android Q適配 非SDK介面管控
developer.android.google.cn distribute android q android q 更新了黑名單 黑灰名單的介面,增加了一些新的名字。如在 android p 中被限制的黑灰色名單 darkgrey list 現在叫做 greylist max o,在 androi...
學習遠控介面設計一 程式介面大小
新建乙個mfc工程。分別為如下 分別將最大化和最小化開啟。程式會這樣。如何讓程式跟隨大小自己變化。先給控制項新增變數。同時給視窗新增響應訊息。void cghostdlg onsize uint ntype,int cx,int cy if m list msg.m hwnd null 改變日誌框大...
星空 控控控 上ke控 新浪部落格
摸不到的顏色是否叫彩虹 看不到的擁抱是否叫做微笑 乙個人想著乙個人 是否就叫寂寞 命運偷走如果只留下結果 時間偷走初衷只留下苦衷 你來過然後你走後 只留下星空 那一年我們望著星空 有那麼多的燦爛的夢 以為快樂會永久 像不變星空 陪著我獵戶天狼 侄女光年外的寂寞 回憶青春 夢想何時常常隱沒 我愛過然後...