文章目录
第一章 Session会话管理概述
造成丢失是因为后台服务器sessionid以及session对象存放位置问题。
(不同的Tomcat对应不同的JVM,Session容器中存放不通用的key、value)
Session会话共享方案
- 使用容器扩展插件,如基于tomcat的tomcat-redis-session-manager(添加tomcat时要再配置一次)
- 使用Nginx负载均衡的ip_hash策略(移动设备换ip时、hash取模后值相同导致服务器过载)
- 写一套Session会话管理的工具类(不推荐,不如第一种,还不一定好用【考虑到各种情况】)
- 使用框架的会话管理工具----Spring Session。不依赖tomcat容器不需要改动代码
第2章 Spring Seesion入门
特性
- 提供用户session管理的API和实现
- 提供HttpSession,以中立的方式取代web容器中的session,如tomcat中的session
- 支持集群的session处理,不必绑定到具体的web容器去解决集群下的session共享问题
第3章 Spring Session常见的应用场景
1 同域名下相同项目(集群环境)实现Session共享
定义一个专门配置SpringSession的bean标签配置----类为RedisHttpSessionConfiguration
2 同域名下不同项目(集群环境)实现Session共享
cookie不允许跨路径访问,在Spring配置文件中设置,指定SpringSession的sessionId存放在域名的根路径下
<property name="cookiePath" value="/" />
3 同根域名不同二级子域名下的项目实现Session共享
cookie无法跨域名获取。适合用于Nginx下多态虚拟主机的多城市部署
<!--指定SpringSession的SessionId存放在跟域名下-->
<property name="domainName" value="myweb.com"/>
4 单点登录
不同的根域名下的项目实现Session共享,例如:淘宝网登录后,天猫商城也登录了
单点登录(Single Sign On),简称SSO。指定所有信任的网站到SSO系统中登录,返回一个token作为身份识别码,其他网站通过这个token去SSO中去检测
第4章 SpringBoot 集成Spring Session
添加依赖
<!--SpringBoot与Redis集成的起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--Spring Session 将数据存入Redis中的一个依赖-->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
修改配置
spring.redis.host=192.168.52.128
spring.redis.port=6379
spring.redis.password=123456
#设置SpringSession的生命周期
#server.servlet.session.timeout=30m
#指定Cookie的存放路径为根路径,实现同域名下不同项目的session共享
#server.servlet.session.cookie.path=/
#指定Cookie的存放域名,实现同根域名不同二级子域名的session共享
#server.servlet.session.cookie.domain=myweb.com
server.port=9300
传送门
上一章:分布式 第五章 Nginx
下一章:分布式 第七章 FastDFS