State Server实现多机器多站点 Session 共享 全手记

网络环境有2台windows 2008 (192.168.1.71,192.168.1.72) 需要部署成 WebFarm,提高容错性。 网站部署在2台机器上的2个站点,如何才能做到Session的共享呢?

 

第一个方法:不共享。用HAProxy作负载均衡,它支持session会话保持功能,即同一个IP只转发到一台服务器上基于cookiessession sticky

第二个方法:State Server 。

选择71作为State Server,修改注册表的[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters]中的AllowRemoteConnection,把它改成1,默认是不允许远程连接的,值为0,另外在这里也可以改Port 端口号,默认的是42424端口。启动asp.net state service。

 

在71,72上的IIS新建站点,不要用默认站点,文件路径,网站名字都要一样,SiteID也要一样。

 

修改web.config。 在每个站点的web.config上都设置如下: (machinekey 可以在iis管理界面自动生成)

< sessionState  mode ="StateServer"  stateConnectionString =
"tcpip=192.168.1.71:42424"
 timeout ="30"  cookieless ="false"   />

< machineKey  validationKey ="我的validationKey"
decryptionKey
="我的decryptionKey"
validation
="SHA1"  decryption ="AES"   />

网上很多文章讲到这一步就完了,但这样的话,2个站点所产生的SessionID还是不同了, 一定要确保这些共享session的网站使用相同的一级域名,比如 www.test.com,www1.test.com,www2.test.com等等的.test.com域的网站. 测试时一定要用域名访问,假如用ip,localhost等访问,SessionID是不同的

你可以在测试机器上修改C:\WINDOWS\system32\drivers\etc\host文件,增加2行

 192.168.1.71 www.test.com

 192.168.1.72 www1.test.com

然后在web.config增加一句

 

< system.web >
     <!--  让其在跨站点访问时,使SESSION能共用  -->
     < httpCookies  domain ="test.com"   />    
</ system.web >

 

做一个aspx测试页面, 把Session.Session显示出来,看是不是一样,在71的WebSite 设置Session["abc"]="def", 然后在72上面Get Session看能不能取到值

 

第三个方法: 放在Sql Server里, 但我不赞成使用这个,因为sql server的连接数有限,很容易成为瓶颈

     < sessionState  mode ="SQLServer"  sqlConnectionString ="Data Source=127.0.0.1;User ID=ASPState;Password=ASPState;"  timeout ="60"   />

 

 第四个方法:放在MemCache里,自己实现custom的SessionStateProvider.

网上关于memcache的有2个实现,一个是enyim的https://github.com/enyim/memcached-providers (这个依赖CouchDB)

另外一个是http://memcachedproviders.codeplex.com/(只实现了Session,没实现OutputCacheProvider,这个net4.0才有),

他们也是用sessionID或者SessionID+ WebSiteName作为MemCache的Key的。这里就不详细说明了。

 

 

 

转载于:https://www.cnblogs.com/zitjubiz/archive/2012/06/01/Session_share_WebFarm_StateServer.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值