web多服务器之间的session同步方法

同一个用户访问同一个网站,做了负载均衡的话会被分配到不同的服务器上,如果session不同步的话就会出现刚才登陆了的用户这一会还需要登陆,如何解决这个问题呢,我目前知道的有三个方法,我先记录下来。

1.利用数据库同步session ,简单的讲就是将某个用户的session存在数据库里面,自然的每个服务器的数据库都必须要又一个这个表,这无疑加大了对数据库的操作,让数据库压力山大。

2.利用cookie 存储session,session是以文件的形式存放在服务器的,cookie是以文件的形式存在客户端的,怎么实现同步呢?方法很简单,就是用户访问页面产生的session放到cookie里面就是以cookie为中转站,你访问web服务器A,产生的session就把他放在cooike,你访问被分配到web服务器B,这个时候,web服务器B先判断服务器有没有这个session,如果没有,在去看看客户端的cookie里面有没有这个session,如果也没有,说明session真的不存,如果cookie里面有,就把cookie里面的sessoin同步到web服务器B,这样就可以实现session的同步了。

说明:这种方法实现起来简单,方便,也不会加大数据库的负担,但是如果客户端把cookie禁掉了的话,那么session就无从同步了,这样会给网站带来损失;cookie的安全性不高,虽然它已经加了密,但是还是可以伪造的。

3.memcache可以做分布式,如果没有这功能,他也不能用来做session同步。他可以把web服务器中的内存组合起来,成为一个"内存池",不管是哪个服务器产生的sessoin都可以放到这个"内存池"中,其他的都可以使用。

优点:以这种方式来同步session,不会加大数据库的负担,并且安全性比用cookie大大的提高,把session放到内存里面,比从文件中读取要快很多。

缺点:memcache把内存分成很多种规格的存储块,有块就有大小,这种方式也就决定了,memcache不能完全利用内存,会产生内存碎片,如果存储块不足,还会产生内存溢出。

总结:上面三种方法都是可行的:

第一种:最影响系统的速度,不推荐使用;

第二种:效果不错,不过会很不安全,有人说加密不就好了,其实加密也不安全;

第三种:个人觉得是最好的,不过系统一旦出现宕机就会丢失session,毕竟是存在内存里面的

其实还有第四种方案,用redis代替memcache就好了,至于为什么,你去看下redis和memcache的区别就知道了;



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会php的猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值