一:通过数据库mysql共享sessionid
方法一:将所有的session_id都保存在mysql数据库中,每一次请求来的时候都去检查数据库里面sessionid的情况,达到sessionid同步的目的
方法二:将sessionid的表跟所有的表放在一起,如果mysql做了主从,需要每一个数据库都存在这张表,并且时时同步
优缺点:以上两种方法,方法一比较好,分离了session表和业务表,减少了数据库的压力,mysql是基于磁盘的数据库,读写本来就比较慢,如果读写频繁的话,效率也很低,因此并不推荐这种办法。
二.通过cookie共享session
将用户访问页面产生的session信息放在cookies中,以cookie为中转站
当用户访问A服务器时,生成session信息并且保存在cookie中,当用户访问分配到服务器B时,先检查服务器有没有session信息,如果没有的话,就把cookie里面的session信息同步到服务器B
缺点:cookie共享session,安全性不高,被拦截或者伪造的可能性增大,如果客户端禁止使用cookie,都有可能无法共享session
三.通过服务器同步共享session
使用一台服务器作为登录服务器,当登录成功后,我们可以使用脚本或者守护进程将session信息同步到其它服务器,这样其它服务器也有session信息了,可以保持登录状态了。
缺点:同步服务器的速度很慢,可能等到下一次分发访问后还没同步完,而且一旦登录服务器宕机之后,整个系统都不能运行
四.通过NFS共享session
NFS(network file system)可以让不同的机器,不同的操作系统共享文件。准备一台NFS服务器,将所有生成的session信息写入到服务器中,每次用户访问的时候,都来这个服务器获取session信息,这样就能共享session信息了。
缺点:依赖性太强,如果NFS服务器宕机,就无法工作了,当然可以考虑设置集群。
五.使用memcache来同步session
memcache是一套分布式的高速缓存系统,memcache工作流程:当用户访问服务器时,首先从memcache中获取数据,如果获取不到就从数据库中获取数据,并把数据同步到memcache中,第二次访问的时候就能从memcache中获取数据了。
因此无论什么服务器生成的session信息保存在memcache中,就可以共享sessionid了
优缺点:这种方式同步session,不会增加数据库的负担,而且比cookie安全的多,放在内存中,读取速度也比较快
缺点:memcache中数据是用内存块的形式保存,不能完全利用内存,会产生内存碎片。而且memcache只存在内存中,一旦服务器停止运行,数据就丢失了,
六.通过redis共享session
redis共享session和memcache一样,都是将数据保存在内存中,区别是redis会周期性的把更新的数据写入到磁盘中或者把修改的操作追加到日志文件中,并且可以在此基础上实现主从
|
|