分布式 - 集群环境下session相关问题

分布式 - 集群环境下session相关问题

Session 共享方案

session 集中存储(redis等)。

具体过程如下:
新增Filter,拦截请求,包装HttpServletRequest(使用HttpServletRequestWrapper)改写getSession 方法,从第三方存储中获取session 数据(若没有则创建一个),返回自定义的HttpSession 实例。在http 返回response 时,提交session 信息到第三方存储中
分布式 - 集群环境下session相关问题
分布式 - 集群环境下session相关问题
分布式 - 集群环境下session相关问题

考虑到session 中数据类似map 的结构,采用redis 中hash 存储session 数据比较合适。

SSO

通过一个ticket 进行串接各系统间的用户信息。
分布式 - 集群环境下session相关问题

1、对于完全不同域名的系统,cookie 是无法跨域名共享的,因此sessionId 在页面端也无法共享
2、cas 方案,直接启用一个专业的用来登陆的域名(比如:cas.com)来供所有的系统的sessionId。

过程

  1. b.com 打开时,发现自己未登陆---->于是跳转到cas.com 去登陆
  2. cas.com 登陆页面被打开,用户输入帐户/密码登陆成功
  3. cas.com 登陆成功,种cookie 到cas.com 域名下----------->把sessionid 放入后台redis<ticket,sesssionid>—页面跳回b.com
  4. b.com 重新被打开,发现仍然是未登陆,但是有了一个ticket 值
  5. b.com 用ticket 值,到redis 里查到sessionid,并做session 同步------ >种cookie给自己,页面原地重跳
  6. b.com 打开自己页面,此时有了cookie,后台校验登陆状态,成功