以前回答过一样的问题,我从新拿出来再回答一遍。题主请看html
首先提醒一下题主不要被新技术吓到了,也不要去查什么SSO(Single Sign On,单点登陆),那样只能增大你问题的复杂度和对这个问题的恐惧心理,其实真的没那么难。redis
我来帮你拆解下问题,你说的Session多端登陆,其实能够拆解为Session共享+登陆,不是什么高级的东西,无非是须要的Session值在让不一样服务器不一样域名的状况下均可以访问,让你们都读取同一个Session值,重要的是同一个session_id()值。这样的话,每台(服务器/项目)读取的都是一样的数据,既然都是读取一样的数据(尤为读取一样的session_id()值),那么咱们不就能够凭借此标识符让不一样用户显示不一样的内容,多点登录的问题不就解决了sql
(把问题简化,登陆对于用户看来是一个特别的过程,在咱们开发者看来无非就是让不一样的人读取到不一样的数据而已,而咱们只须要获取那个登录标识符便可)。数据库
也就是说,session共享的关键技术点在于两点:跨域
1. 让客户端访问同一个sessionId,
2. 让全部域名对应的服务器访问的Session的数据的位置必须一致服务器下面重点讲讲实现,Session共享相对于Cookie共享来讲较为复杂,由于状况相对于比较多,大概有四种状况cookie
同服务器同域名,同服务器不一样域名,不一样服务器同域名,不一样服务器不一样域名。session
同服务器同域名(不一样子域名)的实现:nosql
实现比较简单,直接找一份网上的demo(图侵删),直接按照如下的代码实现便可。
htm
同服务器不一样域名的实现:
这种状况下,咱们再次明确实现session共享的关键技术点,同一个sessionId,一样的数据源。
不一样域名的话就要先将cookie('PHPSESSID')跨域,而后经过这个sessionid值从MySQL数据库或者Nosql中取得对应数据,这样就实现了同服务器不一样域名的session共享。
首先是cookie跨域:
而后是Redis数据共享,key就是session_id,值就是须要共享的数据,使用到的就是Redis的集群技术,实例过于复杂,感兴趣的能够直接去文章查看:redis cluster 集群 安装 配置 详解
不一样服务器同域名的实现:
此种状况与<同服务器不一样域名的实现>差很少,但在此种状况下不须要考虑cookie跨域的问题了,那么着重实现数据共享便可,同上,key为sessio_id,值为具体的数据值,参考文章同上redis cluster 集群 安装 配置 详解。
不一样服务器名不一样域名的实现:
此种状况和<同服务器不一样域名的实现>图探访,也是要实现两个目标,同一个sessionId,一样的数据源。不一样域名的话就要先将cookie('PHPSESSID')跨域,而后经过这个sessionid值从MySQL数据库或者Nosql中取得对应数据,这样就实现了同服务器不一样域名的session共享。
首先是cookie跨域:
而后是Redis数据共享,key就是session_id,值就是须要共享的数据,使用到的就是Redis的集群技术,实例过于复杂,感兴趣的能够直接去文章查看:redis cluster 集群 安装 配置 详解。
咱们发现四种状况下的解决方式都差很少,第2种状况<同服务器不一样域名的实现>和第四种状况<不一样域名不一样服务器的实现>更是基本同样,其中的核心思想无非就是解决两个根源问题,session_id你们须要获取同一个,有一个共享的数据源须要给你们获取。
搞明白了这两点,Session共享的SSO也就水到渠成了。有疑惑可直接在评论区询问,我会当即回答。