zoukankan      html  css  js  c++  java
  • 简单的自定义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

  • 相关阅读:
    POJ 2175 Evacuation Plan 费用流 负圈定理
    POJ 2983 Is the Information Reliable? 差分约束
    codeforces 420B Online Meeting
    POJ 3181 Dollar Dayz DP
    POJ Ant Counting DP
    POJ 1742 Coins DP 01背包
    中国儒学史
    产品思维30讲
    Java多线程编程核心技术
    编写高质量代码:改善Java程序的151个建议
  • 原文地址:https://www.cnblogs.com/zzp0320/p/7872737.html
Copyright © 2011-2022 走看看