IRequiresSessionState介面控制

2022-02-22 12:58:45 字數 1440 閱讀 9790

剛剛接觸.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控 新浪部落格

摸不到的顏色是否叫彩虹 看不到的擁抱是否叫做微笑 乙個人想著乙個人 是否就叫寂寞 命運偷走如果只留下結果 時間偷走初衷只留下苦衷 你來過然後你走後 只留下星空 那一年我們望著星空 有那麼多的燦爛的夢 以為快樂會永久 像不變星空 陪著我獵戶天狼 侄女光年外的寂寞 回憶青春 夢想何時常常隱沒 我愛過然後...