簡單的自定義Session


有關Session、Cookie機制建議參考文章CookieSession機制詳解寫的很詳細,不再贅述

本篇文章通過一個簡單的案例揭秘Session機制以及和Cookie的區別和聯系:

服務器端代碼:

 

 1  /*自定義Session*/
 2     public class MySession
 3     {
 4         private const string MSession = "MySessionId";
 5         private HttpContext context;
 6         private string sessionId;   //唯一標識這個session,最終將SessionId放到客戶端Cookie中
 7 
 8         //提供構造函數
 9         public MySession(HttpContext context)
10         {
11             this.context = context;
12             HttpCookie cookie = context.Request.Cookies[MSession];
13             if (cookie == null)
14             {
15                 CreateSession();
16             }
17             else
18             {
19                 this.sessionId = cookie.Value;
20             }
21            
22         }
23         //創建Session 使用Cookie來保存SessionId
24         public void CreateSession()
25         {
26             Guid guid = new Guid();
27             sessionId = guid.ToString();
28             HttpCookie cookie = new HttpCookie(MSession);
29             cookie.Value = sessionId;
30             context.Response.SetCookie(cookie); 
31         }
32 
33 
34         public void SetValue(string value)
35         {
36             //Session的值是保存在服務器上的
37             string path = context.Server.MapPath("~/MySession"+sessionId);
38             File.WriteAllText(path,value);
39         }
40 
41         public string GetValue()
42         {
43             string path = context.Server.MapPath("~/MySession"+sessionId);
44             if(!File.Exists(path))
45             {
46                 return null;
47             }
48             return File.ReadAllText(path);
49         }
50     }

 

分析:

1)每一個Session實例都用sessionid來唯一標記,為保證這個sessionid唯一性,以上例子中使用了GUID算法來生成

2)當客戶端首次訪問的時候,服務器端調用CreateSession()方法,返回給這個HttpContext對象一個Cookie,Cookie的值是使用GUID生成的sessionid,這個Cookie的value即是我們自定義的Session的Id了!根據需要,使用SetValue()方法,為自定義Session賦值(Session的value保存在服務器上)。

3)客戶端再次訪問的時候,服務器端根據HttpContext“攜帶”過來的Cookie信息(即sessionid),進行匹配,調用GetValue()方法,得到Session的Value,即得到了客戶端的狀態信息

4)用一個通俗的案例來解釋------以前病人看病的時候,都會使用“病例本” ,病例本封面寫上病人的姓名性別等信息,病例里邊寫每次診斷的信息(用了什么葯,病人狀況怎么樣等),每次病人看病的時候,攜帶病例本找自己的主治醫生。這個“病例本”就相當於Cookie。而現在很多醫院引進了自己的HIS系統,病人看病的時候,只用攜帶自己的身份證號,掛號是說出自己的身份證號碼,就能在HIS系統中查到自己以前的就診情況,也就是說,就診信息不再記錄到病歷本中由病人攜帶,而是記錄到醫院的HIS系統中,這個HIS系統就相當於Session

 


免責聲明!

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



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