1. 程式人生 > >HttpContext.Current.Session 和 Session 的區別

HttpContext.Current.Session 和 Session 的區別

使用 pro 啟動 protect and con 動作 system ont

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 的區別