1.为什么要有session共享
在我们系统使用中,一般都是一处登录,处处使用,但是如果多台服务器时,我们的session无法跨域请求,导致一处登录,只能在当前服务器登录
2.session原理、
3.解决方案
3.1 session复制
在服务器中设置修改配置,使每一个的服务器的session都复制到其他服务器,让每一个服务器都拥有所以的session
优点:实现简单,只需要修改web-server(tomcat)的配置让所有session复制到其他服务器
缺点:session大量进行同步, 占用网络带宽,提高服务器压力,无法进行大量服务器横向扩展
3.2 session将cookie存放在客户端中
通过请求将session存放在cookie中,每次请求将请求携带cookie中全部的信息
优点:服务器不需要存储session,用户保存自己的session到cookie中,节省服务器资源
缺点:携带用户的所有cookie资源,浪费网络带宽
长度有限制4k,不能存储大量信息
存放信息在客户端,会被篡改
3.3 hash一致性
这是我们常用到的一种解决方案,可以使用nginx根据ip进行转发,让指定的用户转发到指定的服务器中。
优点:支持负载均衡,可以水平扩展,只需要修改nginx的配置就可以很方便的实现
缺点:session还是存在服务器中,浪费资源,如果服务器出现问题就会丢失数据。
3.4 统一存储
可以将session存放在数据库或者非关系型数据库中,无论存放或者取用都在数据库中
优点:没有安全隐患,可以水平扩展,服务器宕机不会丢失数据
缺点:相较于内存处理,使用redis或者数据库存取会慢一些,需要修改代码才可以使用getsession修改为redis查询。
增加了一次网络IO,加大了服务器和数据库压力
tips:这种方式可以使用springSession解决这些缺点