HttpContext.Current.Session 和 Session 的區別
Session(會話)通常指一個動作從開始到結束不間斷的一個動作。
例如“打電話”,通常是“1.拿起電話--2.撥對方號碼--3.對方截圖--4.掛機”。這四個步驟從完成到結束組成了一個基本的Session,中間任何一步斷裂,都會導致Session的失效。
而在瀏覽器裏,Session主要通過連接傳遞,“打開購物--點擊連接選擇物品--添加到購物車--結賬”組成了一個Session,在不使用Cookie的情況下,中間任何一步斷裂都會Session失效。
所有,你用瀏覽器打開2個頁面,在一個頁面裏賦值,在另外一個瀏覽器取值,是取不到的。只能在一個瀏覽器通過連接傳遞(或者通過代碼跳轉到另外一個頁面)而取到值。
HttpContext.Current.Session 和 Session主要是針對瀏覽器用戶,所有,基本上兩者基本上沒有差別,但是不是所有程序都是通過瀏覽器訪問的。
例如用戶通過exe程序獲取數據,就可能失效。
另外HttpContext.Current.是針對當前用戶,而Session則是針對的web上下文環境裏。
例如有2個頁面:default.aspx代碼如下
protected void Page_Load(object sender, EventArgs e)
{
System.Threading.Thread threadHand1 = new System.Threading.Thread(() => { Session["a"] = "a"; }); threadHand1.Start(); Response.Redirect("default2.aspx");}
而在另外一個頁面獲取
protected void Page_Load(object sender, EventArgs e) { Response.Write(Session["a"]); }
此時是可以獲取到的。
而如果上面代碼修改為
protected void Page_Load(object sender, EventArgs e) { System.Threading.Thread threadHand1 = new System.Threading.Thread(() => { HttpContext.Current.Session["a"] = "a"; }); threadHand1.Start(); Response.Redirect("default2.aspx"); }
另外一個頁面修改為
protected void Page_Load(object sender, EventArgs e) { Response.Write(HttpContext.Current.Session["a"]); }
則獲取不到。
因為 default1.aspx裏的 System.Threading.Thread 啟動的Context並不是default2.aspx裏的Context。
總之,除非你開房exe,第三方組件接口等,否則,基本上2者基本上沒有區別。
HttpContext.Current.Session 和 Session 的區別