在 一文读懂Cookie与Session 中我们介绍了Cookie与Session,这篇文章将继续这个话题,讲述Cookie与Session的实际应用场景。
基于Cookie与Session的登录认证
这是上一篇文章的登录模型,它在单机系统中,表现的很好很强大。但是在分布式系统中却不适用,如下图,有3台Tomcat,你在tomcat1登录了一次,但是你去tomcat2去访问的时候,因为session只存在tomcat1中,所以你又得去登录一遍,累死。
那么有没有好的解决方案呢,有的,那就是Session共享
Session共享
1.session复制
比较经典的就是tomcat集群的session复制机制。用户浏览器访问后,负载均衡器定位到了Tomcat1,如果发现Tomcat1没有session,就会创建一个session,作为主备份(primary copy)。同时广播给其他Tomcat服务器,让它们生成tomcat1的session的拷贝(backup copy)。
第二次用户浏览器访问,如果Tomcat1挂了,负载均衡器分配到比如Tomcat2上,就会有以下两种情况:
1.Tomcat2没有session拷贝,它会向其他Tomcat机器询问是否有session拷贝,有的话,借给她一份。Tomcat2借到session拷贝后,作为主备份,然后再广播给其他的机器。
2.Tomcat2有session拷贝,升级为主拷贝,然后广播给其他机器
2.Session集中存储
这种情况下,就是完全把Session托管给外部环境,比如redis缓存,数据库等,来进行统一存储。所有的服务器统一从一个地方读取。