在ASP.NET中對Session的一些瞭解

來源:互聯網
上載者:User

Session的工作原理:

(1)當一個session第一次被啟用時,一個唯一的標識被儲存於本地的cookie中。(2)首先使用session_start()函數,PHP從session倉庫中載入已經儲存的session變數。(3)當執行PHP指令碼時,通過使用session_register()函數註冊session變數。(4)當PHP指令碼執行結束時,未被銷毀的session變數會被自動儲存在本地一定路徑下的session庫中,這個路徑可以通過php.ini檔案中的session.save_path指定,下次瀏覽網頁時可以載入使用。 何為session???在伺服器端有一個session池,用來儲存每個使用者提交session中的資料,Session對於每一個用戶端(或者說瀏覽器執行個體)是“人手一份”,使用者首次與Web伺服器建立串連的時候,伺服器會給使用者分發一個SessionID作為標識。SessionID是一個由24個字元組成的隨機字串。使用者每次提交頁面,瀏覽器都會把這個SessionID包含在HTTP頭中提交給Web伺服器,這樣Web伺服器就能區分當前請求頁面的是哪一個用戶端,而這個SessionID是一cookie的方式儲存的在用戶端的記憶體中的,如果想要得到Session池中的資料,伺服器就會根據用戶端提交的唯一SessionID標識給出相應的資料返回。儲存在Session池中的資料是全域型的資料,可以跨頁面訪問,每個SessionID中只儲存唯一的資料。Session池中的資料不能跨進程訪問。

session的聲明周期與銷毀,session儲存資料計時是滾動計時方式。具體是這樣的,如果你開啟寫入session,從寫入開始,此頁面如果一直沒有提交操作,則預設時間是20分鐘,20分鐘後session被伺服器自動銷毀,如過有提交操作,伺服器會從提交後重新計時以此類推,直至設定時間內銷毀。可以設定session的銷毀時間。

我們知道Session與Cookie最大的區別在於:Cookie資訊全部存放於用戶端,Session則只是將一個ID存放在用戶端做為與服務端驗證的標記,而真正的資料都是放在服務端的記憶體之中的。session中儲存的資料是在服務端的,而每個使用者如進行登入操作,都要進行session資料寫入,所以建議慎用session,就是少用。

下面是我寫的一個例子,Session大致的意思如例子中的介紹:

這是一個前台頁面,登陸介面(如),有使用者名稱、密碼以及登陸按鈕。使用者登陸需要將使用者名稱傳到主介面上,顯示是該使用者登陸,我用的Session。

   

上面是登陸介面,使用者名稱是test,是主介面,圖中的"test"正是使用者名稱,從登陸介面傳過來的值。

登陸介面後台代碼(不全面,有刪減!!):

        /// <summary>        /// 登陸到主介面        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        protected void btnSign_In_Click(object sender, EventArgs e)        {            string user = this.txtUsername.Text.Trim();            string pwd = this.txtPassword.Text.Trim();            if (user == "" || pwd == "")            {                Response.Write("<script>alert('使用者名稱和密碼不可為空,請輸入使用者名稱或密碼!');</script>");            }            else            {                int state = 0;//操作資料庫結果                string sql = "";//SQL語句                try                {                    //開啟資料庫                    helper.Connect();                                        //查詢使用者資訊記錄                    sql = "select Username,Password from UsersInfo where Username='" + user + "'and Password='" + pwd + "'";                    // 執行查詢命令                    state = helper.DataTable_UsersInfo(sql);                    if (state > 0)                    {                        Session["Username"] = this.txtUsername.Text;//傳值(使用者名稱)                        Server.Transfer("Index.aspx");                    }                    else                    {                        Response.Write("<script>alert('對不起,使用者名稱或密碼不正確,請您重新輸入!');</script>");                        this.txtUsername.Text = "";                        return;                    }                }                catch (Exception E)                {                    E.Message.ToString();                }                finally                {                    //關閉資料庫                    helper.Close_Up();                }            }        }

登陸按鈕中的Session傳值

使用者通過登陸介面登陸之後,在主介面上會顯示是該使用者的登陸,所以應該在主介面Page_Load()裡面載入從登陸介面傳過來的值。代碼如下:

       protected void Page_Load(object sender, EventArgs e)        {            if (Session["Username"].ToString() != null)            {                this.lblUsername.Text = Session["Username"].ToString();                Session.Timeout = 60;                //Session.Remove("Username");            }        }

總之,所說的不是很專業,就是自己練習的例子。非要說個所以然,什麼具體的功能啊,存在哪些方面的問題啊、缺陷啊,也不會詳盡。如果您需要這方面的知識,就盡量多在網上找找吧。。。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.