日期:2014-05-17  浏览次数:20606 次

集群中Session的共享问题,超急!
集群中Session的共享问题,超急!

我用windows2003做了个web群集,共有四台

假设分别为A,B,C,D

现在问题是,一个用户登陆了A,在A上留下了一个Session

他在以后的操作中,由于均衡等原因,跑到B上去了,但B上没有他的Session,这样该页面就认为他没有
权限,
后来我想了个办法,把B,C,D上的web.config,全加上了
<sessionState mode="StateServer" stateConnectionString="tcpip=192.168.3.8:42424" timeout="30"/>

使所有机器的Session都保存在192.168.3.8上,

登陆什么的都没问题,但一刷新面面,问题就来了,张三变成李四,总之是一刷,Session就变了,请
问高手,咋回事?

------解决方案--------------------
随着互联网应用的用户量不断激增,并发的需求越来越受到开发者的关注,通过集群的方式来解决web的瓶颈。但是集群的session共享是个比较头疼的事情,归结起来就三种解决方案:

(1)客户端存储方案:把session加密后存在cookie中,每次session信息被写在客服端,然后经浏览器再次提交到服务器.即使两次请求在集群中的两台服务器上完成,也可以到达session共享.这种解决方法的优点是session信息不用存放在服务器端,大大减轻了服务器的压力.另一个优点是一个session中的两次或多次请求可以在一个群集中的多个服务器上完成,可以避免单点故障.目前,淘宝是采用的这种解决方案.

这个方案可能比较陌生,但它在大型网站中还是比较普遍被使用。原理是将全站用户的Session信息加密、序列化后以Cookie的方式,统一种植在根域名下(如:.host.com),利用浏览器访问该根域名下的所有二级域名站点时,会传递与之域名对应的所有Cookie内容的特性,从而实现用户的Cookie化Session 在多服务间的共享访问。

这个方案的优点无需额外的服务器资源;缺点是由于受http协议头信心长度的限制,仅能够存储小部分的用户信息,同时Cookie化的 Session内容需要进行安全加解密(如:采用DES、RSA等进行明文加解密;再由MD5、SHA-1等算法进行防伪认证),另外它也会占用一定的带宽资源,因为浏览器会在请求当前域名下任何资源时将本地Cookie附加在http头中传递到服务器。

(2)集中式session共享方案:提供一个群集保存session共享信息.其他应用统统把自己的session信息存放到session群集服务器组.当应用系统需要session信息的时候直接到session群集服务器上读取.这种方式具有第一种方式的第二个优点. 
 
(3)session复制方案:配置负载均衡服务器,让用户的一个session在一个服务器完成.定时的备份session信息到salve上面.一台服务器down掉后,通过均衡服务器透明把用户的请求转发到群集中的其他服务器上,此时需要从salve上读取备份的session信息. 


------解决方案--------------------
测试发现在ASP.NET中.session存在域的问题,把session域设置一样就好了
------解决方案--------------------
串Session问题,这个问题很难解决,就像是QQ空间一样,如果你在同一台计算机上登陆,同时操作,那么就会串Session