總結Session、Cookie、Application的原理和應用


Session

基本原理:

當用戶通過瀏覽器訪問服務器時,服務器本身並不知道是誰來訪問的(http協議是無狀態的),於是它就給每個訪問者進行臨時編號(也就是給每個訪問者創建相對應的Session(會話)),與此同時,為了方便一段時間內訪問者可以對服務器“自由訪問”,服務器就把臨時編號(SeesionID)給訪問者(存儲在客戶端的Cookie[無過期的Cookie]中,當瀏覽器關閉時釋放,或使用URL方式),當這段時間內需要進行驗證時(請求),服務器就可以直接拿着訪問者的臨時編號進行驗證。

注:

1、每個用戶進行訪問服務器時,都會在服務端創建一個相對應的Session,分配的SessionID是唯一的,用來標識不同的訪問用戶

2、為了獲取更快的存儲速度,服務端把Session保存在內存中,因此存放在Session中的信息應該精簡,避免內容過於復雜,當大量用戶訪問時可能導致內存溢出

3、Session是具有生命周期的,當超過了這段時間(超時時間默認為20分鍾),Session就會失效

4、Session生成后,只要用戶繼續訪問(Active),服務器就會更新該Session的最后訪問時間,並維護該Session

5、當用戶訪問過多時,隨之創建的Session也會變多。為了防止內存溢出的問題,服務器就會把長時間沒有Active的Session給刪除掉

應用:

例如:用戶驗證登陸

protected void btnLogin_Click(object sender, EventArgs e)
    {
        string user = txtUserName.Text.Trim();
        string pass = this.texPwd.Text;
        string code = this.txtCode.Text;
        if (code == Session["code"].ToString())//比較驗證碼Session["code"]中的值
        {
            string pwd = FormsAuthentication.HashPasswordForStoringInConfigFile(pass, "MD5");
            int IntUserIn = CC.checkLogin(user, pwd);
            if (IntUserIn > 0)
            {
                Session["User"]=user;
... Response.Write(CC.MessageBox(
"用戶登錄登陸成功!")); } else { Response.Write(CC.MessageBox("您輸入的用戶名或密碼錯誤,請重新輸入!")); } } else { Response.Write(CC.MessageBox("驗證碼錯誤!")); } }

更多Session信息盡在→_→  http://msdn.microsoft.com/zh-cn/library/system.web.ui.page.session(v=vs.110).aspx

Cookie

原理:

Cookie是一種發送到客戶瀏覽器的文本串句柄,並保存在客戶機硬盤上,可以用來在某個Web站點會話之間持久地保持數據。Request和Response對象都有一組Cookie。Request.cookie集合是一系列Cookie,從客戶端與HTTP Request一起發送到Web服務器。反過來,如果你希望把Cookie發送到客戶機,就可以使用Response.cookie。

理解性介紹→_→  http://www.open-open.com/lib/view/open1346029190083.html

Cookie和會話狀態的工作原理及Cookie欺騙  →_→  http://blog.csdn.net/yangdelong/article/details/4792763

應用:

在我們平常寫的B/S程序中,會經常用到cookie,主要有以下一些作用:

1、 記錄用戶名和密碼
以及該用戶需要保存的一些信息,如購物購站,使用cookie,可以讓用戶自動登錄到站點等。
2、 定制站點
可以使用cookie來記錄用戶的偏好。
3、 定向廣告
可以使用cookie來記錄用記經常訪問的主題,並向他們顯示與這些主題相關的廣告。

更多→_→  http://wangqiaowqo.iteye.com/blog/680841

Application

原理:

Application用於保存所有用戶的公共的數據信息,如果使用Application對象,一個需要考慮的問題是任何寫操作都要在Application_OnStart事件(global.asax)中完成.盡管使用Application.Lock和Applicaiton.Unlock方法來避免寫操作的同步,但是它串行化了對Application對象的請求,當網站訪問量大的時候會產生嚴重的性能瓶頸.因此最好不要用此對象保存大的數據集合。

應用:

一個經典的實例:在網頁上顯示在線人數

代碼略

 

Application、Session、Cookie的區別→_→ http://www.cnblogs.com/breezeblew/archive/2008/05/02/1179143.html

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM