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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29787335/article/details/72819921

同一个用户访问同一个网站,做了负载均衡的话会被分配到不同的服务器上,如果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不能完全利用内存,会产生内存碎片,如果存储块不足,还会产生内存溢出。

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

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

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

扫描二维码关注公众号,回复: 2974667 查看本文章

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

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



猜你喜欢

转载自blog.csdn.net/qq_29787335/article/details/72819921
今日推荐