使用ASP.NET State Server实现多应用程序间共享Session State

本文探讨了ASP.NET StateServer在多程序间共享Session的问题,指出StateServer按ApplicationDomain隔离Session数据,导致即使在相同域名下也无法实现Session共享。文章尝试通过.NET反射修改ApplicationID来解决此问题,并分享了改用Memcached进行Session管理的计划。

原以为ASP.NET State Server原生支持多程序间共享SESSION,以为在同一服务器上 & 同一根域名下部署的多个应用程序间设置了相同了<sessionState/>和<machineKey/>事情就成了!

事实证明是自己TOO YOUNG TOO SIMPLE。根本不WORK!

BING了一大轮,再找了一下度娘,看到以下较有参考价值的文章:

  1. http://forums.asp.net/t/1759392.aspx?Share+sessions+between+asp+net+web+applications+using+State+Server
  2. http://weblogs.asp.net/lichen/sharing-session-state-over-multiple-asp-net-applications-with-asp-net-state-server
  3. http://blog.itpub.net/12639172/viewspace-675757/

还有其他几篇微软早期的文章,找不回来了。

综合的结论就是State Server存session数据时,是根据application domain分开放的,即便同一根域名下的每个程序请求cookie中带的都是一样的session id,由于这些程序各有一个不同的application id, session的存取其实就分开了。

搜索下来看,微软并没有提供直接的可配置选项,也没有提供公开的接口调用可修改。这个还是很失望的。

上述引用的第二、第三篇文章提到的办法,是在程序初始化时利用.net反射机制调用微软一个未公开的接口去修改各个程序的application id, 使之统一。

我试了一下其中override global.asax.Init()的办法,发现没有用。(iis版本7.5)

用vs 2013 设断点debug一下,发现init没有被调用。非常失望。

再加上前端时间发现State Server的内存一直缓慢增长,从初始化时的50m,在极少请求的情况下,也会慢慢增长到超过100m,症状是很类似于内存泄露的样子。

OK,算你狠,不愿意再蹚state server浑水了。

计划是换用memcached管理session得了。

 

转载于:https://www.cnblogs.com/maizhongfei/p/5491413.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值