现在的位置: 首页 > 综合 > 正文

ASP.Net原理篇 之 Session

2017年11月07日 ⁄ 综合 ⁄ 共 1373字 ⁄ 字号 评论关闭


在之前的文章中已经简单的介绍过Session了 ASP.Net中的四种状态保持机制

今天来详细介绍一下Session的内部运行原理 


看一下怎么创建Session对象



看一下Session的原理图


1. 点击“登陆”以后 在服务器判断用户名密码 如果正确 创建一个Session对象 将用户名和密码保存在Session对象中
2.创建保存Session的时候 是保存在服务器端的内存中 是将Session全部保存在了一个叫做“Session池”的里面
3.在Session池中 是以键值对的形式保存 并且  会为每一个Session对象分配一个Session ID(每一个Session ID都不一样)
4.创建好了以后 将Session ID 以Cookie的形式保存通过响应报文返回都客户端 
5.当客户端每次访问当前网站的任何一个页面的时候 都会将Session ID以Cookie的形式 带着一起访问
6.访问的时候  会先到Session池中来寻找Session 如果找到了 便会将找到的Session的引用 交给当前的页面对
象的Session属性 这一个过程 在请求管道的第9个事件中完成
7.在返回的响应报文中我们可以看到 Cookie中的SessionID是没有过期时间的 因此可以知道SessionID是保存在
浏览器缓存中的当我们关闭浏览器的时候 SessionID就会丢失 找不到Session池中的对象了(在整个回话过
程中都会保留此信息)
8.默认情况下 Session对象在服务器端保存的时间是20分钟 如果当前回话结束了 或者 用户20分钟之内不访问
Session Session对象就会丢失
(可以使用TimeOut来设置Session对象在服务器端的保存时间)如果是
博客、邮箱等一些页面 服务器会利 用AJAX技术来自动刷新页面 防止Session对象
以外丢失


我举一个我们生活中的例子
假如有一天我去银行存钱 去的是中国方舟银行迎泽大街支行 进去以后跟柜台的工作人员说:“我要存10w美金 还有1吨黄金”(这是我的一个梦想 哈哈)
工作人员非常客气的帮我办理了手续 将钱放在了金库 并给了我一张银行卡 上面有卡号 于是我就回家了
下次来中国方舟银行的时候 这次我去的是新城街支行 我潇洒的将银行卡递给银行的工作人员 然后客气的问我“今天您取多少钱的利息?”

在上面的例子中 
钱------------------------------------Session对象 
银行的金库------------------------Session池
银行卡/卡号-----------------------Session ID
中国方舟银行---------------------某个网站
迎泽大街支行/新城街支行-----网站中的不同页面

有一点特别要说一下
Session只能在同一个网站中的不同页面中使用 就像我们在A银行存了钱不能去B银行取一样

这样一说 您是否对Session有了深一层的了解?


在请求管道的第9个事件中寻找和加载Session对象


判断Session是否存在




特别要注意的一点是 当我们在一般处理程序 也就是ashx文件中使用Session的时候 一定要实现 IRequiresSessionState 接口 否则就会保存 


以上就是我对Session的理解 由于个人能力有限 肯定有不对的地方 还请各位牛人指出 以便我不断学习 小弟万分万分感谢!!!!!! 



抱歉!评论已关闭.