统一会话
系统在分布式部署之后,就会存在客户端访问同一个URL可能被分配到不同的机器上,如果没有同意会话问题,
就会导致用户时而登陆,时而未登陆的情况,因此需要使用统一会话来解决这个问题。
解决问题的思路
- 使用hash算法,保证相同的IP能够永久访问到同一台机器
- 实现方式:使用Nginx的IP_Hash算法
- 使用情况: 比较适用服务器比较少,比较简单的服务
- 缺点: IP自身的不可信,可能使用代理 局域网的问题
- 使用统一的会话管理,将会话的数据保存到公共的地方,
- 使用Memcached redis实现缓存
- 缺点:依赖浏览器的cookie 需要保证缓存的高可用性
- 把会话的数据保存到cookie中
- 需要使用序列化技术
- 缺点: 严重依赖cookie 导致数据量传输过大 安全性比较低
继续现实原因,基本上使用第二种方案,统一的会话管理
统一会话管理的实现方式
- 检查cookie里面是否存在JessionID
- 如果有,根据JSessionId直接对对应的session
- 如果没有,创建一个新的JessionId,跟一个新的session关联,将JSessionId和session保存到缓存
- 返回客户端的时候,带着这个JessionId
统一会话管理的问题
- 用户关闭了cookie
- cookie安全性问题
- 跨域访问cookie