关于微软Asp.net下Session的纠结

最近在整一套Web框架,因为公司全部都是.net工程师,所以选择了微软平台来构建一个中大型网站。

最近在做基础框架的时候,搞到Session这一块让我十分头疼,大家知道,大家知道微软为Session也是提供了比较全面的解决方案,但是每一种方案应用到大型应用中都是不太合适。

默认情况下一般Session都是Inproc模式,Session寄宿在Web(IIS)服务器的内存中,速度比较给力,但是全世界都知道此模式下Session会有丢失,IIS重启也会导致Session丢失,不可容忍。

在一种StateServer模式,Session寄宿在Asp.net的WindowsService下,由独立进程来维护,丢失基本不会出现,但是带来了效率上的损耗,另外此模式下被存储在会话状态中的对象必须能够被序列化。

还有一种可能是现在常用的Sqlserver模式,像很多php,Java程序一样,用数据库去维护Session,Asp.net自然是采用Sqlserver去维护,这样Session肯定是安全的,回收也由生成的存储过程自动实现了,但是带来的问题也是蛋疼到爆,访问量一大的话,数据库服务器必挂无疑。

仔细想了一下,以上三种模式单独出来都不太适合一定规模的网站,微软还提供了Custom模式,允许用户自定义Session,没有仔细研究,用的人也不多。

列举了上面集中微软提供的Session管理方案,Inproc,StateServer虽然效率不错,但是显然不足以应付大型Web应用。剩下来俩种方式应该都是可以。

目前的思路是有俩种:

1、使用Sqlserver达到Session持久化的目标,同时复制一份进入memcache,检测Session一概从memcache里读取,这在前面一篇文章中有所介绍:用memcached来保存session会话信息的思路。但是大量的Session更新,数据库的更新依然是十分蛋疼的问题。

2、还是研究下Custom模式,Session的自定义,这样的话应该是可以将Session提取出来存放到指定的位置,比如MongoDB就是很好的选择,利用NoSql存储Session,依然利用memcache读取,剩下的实现方式和1一样。

3、抛弃Session,像雅虎那样,完全无状态连接,采用Cookie,不过对于一些敏感性的操作还是感觉有一定风险。

综上,目前还是觉得2比较靠谱,这段时间还是集中精力研究下Custom模式,回头再写一篇关于此模式下Session存储的文章。

文章可能写的有些片面,对某些方面研究学习的还是不够深入,大神们赶紧来,求指点,求科普。


注:文章由CoderMan原创,转载请说明出处:CoderMan官方主页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值