查看: 884|回复: 0

[.NET开发] 简单的自定义Session

发表于 2017-10-18 08:00:09
太阳http代理AD

有关Session、Cookie机制建议参考文章:CookieSession机制详解,写的很详细,不再赘述

本篇文章通过一个简单的案例揭秘Session机制以及和Cookie的区别和联系:

服务器端代码:

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



太阳http代理AD
回复

使用道具 举报