passport登陆的实现--跨域共享cookie和跨域共享session

来源:互联网 发布:艾克里里淘宝店号码 编辑:程序博客网 时间:2024/05/29 19:21

前言:cookie和session是web开发中非常重要的会话跟踪技术。

主题:前一段时间,因为在开发中使用到公司的统一登录平台passport,所以就自己找了很多资料,详细的学习了一下它们的原理以及实现过程,这里就着重分享一下“跨域共享cookie和跨域共享session”。

场景:公司所有登陆都走的是统一一套pass环境,passport使用的就是COOKIE和SESSION技术,来作为跟踪保存用户信登陆息的。这里有一个问题,比方说,公司的pass种cookie的时候,使用的是".a.com"域,但是由于公司收购或者成立了新的部门业务线(拥有独立新的域名,例如.b.com),那么这种情况下,如果想使用同一套登陆环境,由于存在跨域,就无法实现。如下图1-1所示,passport种cookie在父域名".a.com"下,所有其他的子域名“m.a.com”,"n.a.com"都可以使用;但是,对于“.b.com”就无法共享passport。

图1-1

解决方法:如图1-2所示,登陆走的依旧是统一passport,不区分业务线(即使域名不同),但passport在接受到登陆请求之后,就会发出"http://user.b.com/crossdomain.php?c=asdfgsaghqwqeefdvvgnnn"数据,user模块接受到passport发来的数据,即其中的c参数所携带的数据(其实这个c参数就是一个cookie标示,不过是做了一定的加密),然后解密,再以setcookie的方式种到自己的当前域下(.b.com),这样在".b.com"下也就可以正常的使用passport登陆了。


图1-2 

总结:也就是说user模块是一个桥梁,连接了passport(.a.com)和新业务(.b.com),把用户的登陆信息通过user做个代理转化,然后种植到新的域名下,从而达到统一登录的目的。








2 0