博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单的自定义Session
阅读量:5133 次
发布时间:2019-06-13

本文共 2269 字,大约阅读时间需要 7 分钟。

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

本篇文章通过一个简单的案例揭秘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             else18             {19                 this.sessionId = cookie.Value;20             }21            22         }23         //创建Session 使用Cookie来保存SessionId24         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

 

转载于:https://www.cnblogs.com/caojiannan/p/7651832.html

你可能感兴趣的文章
Java Servlet 过滤器与 springmvc 拦截器的区别?
查看>>
(tmp >> 8) & 0xff;
查看>>
linux命令之ifconfig详细解释
查看>>
NAT地址转换
查看>>
Nhibernate 过长的字符串报错 dehydration property
查看>>
Deque - leetcode 【双端队列】
查看>>
gulp插件gulp-ruby-sass和livereload插件
查看>>
免费的大数据学习资料,这一份就足够
查看>>
clientWidth、clientHeight、offsetWidth、offsetHeight以及scrollWidth、scrollHeight
查看>>
企业级应用与互联网应用的区别
查看>>
itext jsp页面打印
查看>>
Perl正则表达式匹配
查看>>
DB Change
查看>>
nginx --rhel6.5
查看>>
Eclipse Python插件 PyDev
查看>>
selenium+python3模拟键盘实现粘贴、复制
查看>>
第一篇博客
查看>>
typeof与instanceof的区别
查看>>
网站搭建(一)
查看>>
SDWebImage源码解读之SDWebImageDownloaderOperation
查看>>