简单的自定义Session
2018-06-17 23:04:48来源:未知 阅读 ()
有关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
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:从Object对象中读取属性的值
下一篇:禅道之需求追踪和多角色协作流程
- python爬虫学习之用Python抢火车票的简单小程序 2019-08-13
- 用python写一个简单的文件上传 2019-07-24
- xadmin进行全局配置(修改模块名为中文以及其他自定义的操作 2019-07-24
- concurrent.futures模块简单介绍(线程池,进程池) 2019-07-24
- ORM 2019-07-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash