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

    作者:#Finder&

    *本文为作者原创,版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    golang 使用 protobuf 的教程
    golang语言中sync/atomic包的学习与使用
    《算法竞赛进阶指南》0x21有向无环图中点的可达性统计 topsort+bitset
    《算法竞赛进阶指南》0x21树和图的遍历 求dfs序以及树的重心
    《算法竞赛进阶指南》0x17二叉堆 利用优先队列求k叉哈夫曼树的最优结构
    《算法竞赛进阶指南》0x17二叉堆 链表+红黑树实现高效插入、删除、取最小值
    《算法竞赛进阶指南》0x17二叉堆 POJ2442 矩阵取数求前N大
    GIT-windows系统部署gitblit服务器
    mysql 端口修改
    VUE-开发工具VSCode
  • 原文地址:https://www.cnblogs.com/caojiannan/p/7651832.html
Copyright © 2011-2022 走看看