MongoDB实践-自定义ASP.NET Session Store
Session由来
由于HTTP协议是无状态的,客户端与服务器端进行“请求-响应”操作后,建立的连接就释放了,服务器端根本不知道刚才是哪个客户端访问的。但是有些场景是需要知道客户端的状态的,最典型的就是登陆问题,成功登陆后一段时间内就不需要再登陆。为了解决这个问题,服务器端引入了Session技术,它将会话状态保存在服务器端的技术。
Session原理
当用户打开浏览器,请求某个网站的时候,服务器接收请求后,就会在内存中为该请求分配一个内存空间,这个内存空间就叫Session。一个Session对应一个请求而且是唯一的,使用SessionId来表示唯一性。Session数据结构是一个Key-Value的集合。
跟踪机制
- 当服务器端返回客户端请求时,会把SessionId作为Cookie的值发送到客户端;
- 当客户端再请求问服务器时,会把本地保留的SessionId的Cookie放到Http请求头中发送给服务器端;
- 服务器端接收到客户端请求,解析出SessionId,从而获得相应的Session。这样服务器端就知道客户端的状态了
超时管理
服务器端无法判断当前客户端是否还会继续访问,也无法检测客户端是否关闭,所以,即使客户离开或关闭浏览器,服务器还是会保留与之对应的Session对象。
随着时间的不断推移,服务器将会积累大量不在使用的Session对象,并最终会导致服务器内存耗尽。所以服务器就采用了“超时限制”的办法来解决无效Session问题。如果某个客户端在一定时间内没有发出后续请求,服务器则认为客户端已经停止了活动,结束与该客户端的会话并释放Session对象。如果客户端超时后再次发送访问请求,那么服务器则认为这是一个新的会话。
自定义ASP.NET Session Store Provider
在ASP.NET提供的Session Store Provider,有以下四种模式:
1、 InProc模式
这是ASP.NET默认的Session管理模式,在应用进程内维护Session。
2、 StateServer模式
这是在服务器装了.NET环境后自带的一个StateServer服务,在应用进程外管理Session,可以进行多应用间的Session共。
3、 SQLServer模式
这是利用SQLServer进行Session的托管。其优点在于可以利用SQLServer的优势处理海量Session,在应用进程外、可持久化、安全性高等优点。
4、 Custom模式
这是自定义模式,发挥空间很大,在拥有Provider的情况下,可以利用这一模式进行发挥,利用各种各样的数据存储程序进行Session管理。
下面我们将使用Custom模式,一步步来实现Session存储,数据存储程序使用MongoDB。步骤如下:
1、创建一个MongoSessionStateStoreProvider类并继承SessionStateStoreProviderBase。
2、重写SessionStateStoreProviderBase类中的虚方法
3、定义序列化和反序列化的接口ISerialization及实现接口类,因为需要把Session序列化后再存储
4、配置Web.confg文件,在System.web节点里添加SessionState节点,并自定义其子节点Provider的属性 
- name属性是当前Provider的名称
- type属性值就是上面定义的MongoSessionStateStoreProvider类,点号前是命名空间,逗号后面是dll文件名称
- applicationName属性当前应用程序名称
- connectionStringName属性MongoDB数据库连接字符串connectionStrings节点名称,如下所示       
- recordException属性表示是否记录异常,true则是,false则不是。
- journal属性表示是否开启故障恢复和持久化
- writeConcernLevel属性表示Mongo写入的后续处理方式
好,废话不多说,直接上代码。

最后,代码下载,除了源码外这里有一个SessionStateStoreProvider执行顺序流程图可以帮助大家更好的理解SessionStateStoreProvider是怎么实现的
MongoDB实践-自定义ASP.NET Session Store的更多相关文章
- 基于MongoDB打造.Net的分布式Session子系统
		基于MongoDB打造.Net的分布式Session子系统 Taobao有她自己的分布式session框架,.net阵营也不能落后了,在下做了个基于MongoDB的支持最多26台MongoDB的分布式 ... 
- ASP.NET Session原理及处理方法
		session是怎么存储,提取的 1.在服务器端有一个session池,用来存储每个用户提交session中的数据,Session对于每一个客户端(或者说浏览器实例)是“人手一份”,用户首次与Web服 ... 
- ASP.NET Session and Forms Authentication and Session Fixation
		https://peterwong.net/blog/asp-net-session-and-forms-authentication/ The title can be misleading, be ... 
- ASP.net session丢失
		ASP.NET Session的实现: asp.net的Session是基于HttpModule技术做的,HttpModule可以在请求被处理之前,对请求进行状态控制,由于Session本身就是用来做 ... 
- ASP.NET Session详解(转)
		ASP.NET Session详解 本文章来自:http://blog.163.com/adam601@126/blog/static/22506317200932824210996/ 当用户在 We ... 
- ASP.NET Session 详解
		阅读本文章之前的准备 阅读本文章前,需要读者对以下知识有所了解.否则,阅读过程中会在相应的内容上遇到不同程度的问题. 懂得ASP/ASP.NET编程 了解ASP/ASP.NET的Session模型 了 ... 
- Asp.net Session 保存到MySql中
		一 网站项目引入"mysql.web.dll" 二 web.config配置中添加mysql数据库连接字符串 <connectionStrings> <remov ... 
- ASP.NET Session的共享
		注: 在ashx文件中使用Session 首先添加引用 using System.Web.SessionState; 实现接口 public class XXXX: IHttpHandler ==&g ... 
- 使用SQL Server存储ASP.NET Session变量
		创建和配置ASP.NET Session状态数据库 在基于NLB(网络负载平衡)环境下的ASP.NET Web应用程序开发,我们需要将Session存储在数据库中供多个Web应用程序调用,以下为配置方 ... 
随机推荐
- Split Animation Clip From FBX and Multiply Mode Sprite
			Use Script To Creat 2D Animation Clip From Multiply Mode Sprite 很多时候美工拿过来的一张序列帧图片,我们需要转换成 Multiply M ... 
- 编程算法 - 推断二叉树是不是平衡树 代码(C)
			推断二叉树是不平衡树 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一颗二叉树的根结点, 推断该树是不是平衡二叉树. 二叉平衡树: 随意结 ... 
- 响应式设计工具网站mydevice.io
			1.网址 https://mydevice.io/ 2.使用 在mydevice.io上有常见智能手机,PC电脑的尺寸. 
- odoo8.0条形码改为js方式处理
			群里网友@上海-gavin 提供的odoo条形码处理,将原来的图片生成方式改为js处理方式. <div class="row text-center"> <div ... 
- C++中string.find()函数与string::npos
			先说说string::npos参数: npos 是一个常数,用来表示不存在的位置,类型一般是std::container_type::size_type 许多容器都提供这个东西.取值由实现决定,一般是 ... 
- oracle闪回某个时间段的数据
			闪回2013-08-08 08:08:08的数据: insert into table_1 select * from table_2 as of timestamp to_date('2013 ... 
- ASP.NET_SessionId	不相同导致验证码出错
			问题: 今天碰到一个比较奇怪的问题,每个页面请求的cookie的ASP.NET_SessionId 不相同,导致验证码检验出错.也就是说每个请求都是一个新的会话,我们把验证码保证在Session[ra ... 
- Autofc与Mvc,WebForm,Weiapi,Owin整合源码分析
			主要分析一下的几个项目: Autofac.Integration.Mvc Autofac.Integration.WebApi Autofac.Integration.Owin Autofac.Int ... 
- 在ubuntu下安装ns2-allinone-2.35.tar.gz
			1.软件下载 首先先下载ns-allinone-2.35.tar.gz (下载路径http://sourceforge.net/projects/nsnam/files/),将其放到你/home/my ... 
- 华为HiAI 助力苏宁易购,让你尽享完美视觉购物体验!
			还在感慨商品照片与实物存在差距,又要退货? 还在抱怨被忽视的图片小细节,影响了生活品质? 想要“买买买”, 又担心海量的商品图片耗光你的流量? 就在近期 搭载HiAI能力的苏宁易购新版上线, 让你畅快 ... 
