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