1.作用
Cookie是存在客戶端,Session是存在服務器端,目的是一樣的:保存和當前客戶端相關的數據(當前網站的任何一個頁面都能取到Session)。
在本篇博文的姊妹篇《Cookie詳解》中,黑兔在最后說了幾點Cookie的缺陷,簡單的說就是無法存儲重要數據。那么關乎重要數據的狀態如何存儲?Cookie妹妹Session講給你一個很好的答案。
2.醫生的賬本
需要一種“服務器端的Cookie”:醫生需要一個私人賬本,記錄病人編號和身份的對應關系。由于身份證無法造假,所以能夠保證信息不被假冒。(身份證無法造假,這個身份證就可以唯一標識這個用戶;)核心信息放到服務器上,客戶端無法去篡改。這就是Session的大體原理。
3.IRequiresSessionState
Cookie不能存儲機密數據。要使用ASP.Net已經內置的Session機制。普通的HttpHandler要能夠操作Session,要實現IRequiresSessionState接口,這個接口是沒有任何方法的“標記接口”,因為session處理會稍微降低系統性能,所以 HttpHandler 默認不處理Session,asp.net引擎如果看到ashx實現了IRequiresSessionState,則幫咱們處理。
4.自毀裝置
Session有自動銷毀機制,如果一段時間內瀏覽器沒有和服務器發生任何的交互,則Session會定時銷毀。這也就是為什么一段時間不操作,系統就會自動退出。
當然Session也可以手動設置銷毀,比如做安全退出的功能。就需要用到。 context.Session.Abandon();//銷毀Session
5.自毀倒計時
在web.config的system.web節點下配置sessionState節點的timeout,單位是分鐘,默認是20(也只是一個建議,也許服務器10分鐘的時候就讓Session失效了)
1.Session中可以存放任意類型
1 //Cookie 的值是String2 //Session的值可以是幾乎任何類型3 context.Response.ContentType = "text/html";4 context.Session["test1"] = "HelloWorld";5 context.Session["test2"]=888;2.登錄案例
這個案例意圖在演示Session的使用,而絕對不是真的登錄,項目中這樣寫,肯定被打死。。。
1)Login頁面
1 //一個比較好的小習慣,吧Session的名字設置成一個常量字段, 2 //以后可以直接引用這個字段,防止寫錯。 3 public const string LOGINUSERNAME = "LoginUserName"; 4 public void PRocessRequest(HttpContext context) 5 { 6 context.Response.ContentType = "text/html"; 7 string username = context.Request["username"]; 8 string passWord = context.Request["password"]; 9 if (password == "123")10 {11 context.Session[LOGINUSERNAME] = username;12 context.Response.Redirect("Main.ashx");13 }14 else15 {16 context.Response.Write("密碼錯誤");17 }18 }2)需要登錄才能看到的頁面
1 public void ProcessRequest(HttpContext context) 2 { 3 context.Response.ContentType = "text/html"; 4 string username = (string)context.Session[Login1.LOGINUSERNAME]; 5 if (username == null) 6 { 7 context.Response.Redirect("login.html"); 8 } 9 else if (username == "admin")10 {11 context.Response.Write("哇,老大好!");12 }13 else14 {15 context.Response.Write("當前登錄用戶名"+username+"沒有權限查看");16 }17 }
新聞熱點
疑難解答