欢迎光临
我们一直在努力

什么是单点登录?单点登录之cookie + jsonp方案实现

一.什么是单点登录?

多个系统,只需要一次登录就能访问所有系统,只需要一次退出就能退出所有系统。这就是单点登录。

典型案例:淘宝和天猫。只需要登录其中一个,另一个就无需重复登录。

好处:提高了用户体验。

二.单点登录常见方案:

1. cookie + jsonp 实现跨域

2. session入库 + redis(或memcache)

如何选择?

对于需要频繁验证用户登录状态的系统,使用session+redis;例如电商系统,典型代表如taobao.com+tmall.com。

对于不需要频繁验证用户是否登录的系统,使用cookie + jsonp跨域;例如搜狐旗下的站群系统,典型代表是sogou.com + 17173.com + focus.cn + chinaren.com

基础要求:php基础语法+cookie+jquery+jsonp

三.cookie + jsonp方案实现

原理:cookie + jsonp实现单点登录的原理就是利用jsonp实现cookie跨域,再细说一下,就是a站b站c站…下的登录功能都统一链接到其中一个站点如a站下,在这个站点下比对用户名和密码,如果成功就将用户名和密码写入到a站下的cookie中,然后跳转至a站下的success.php中间页,在这个中间页中,通过ajax(dataType=’jsonp’)将用户名和密码发送至其他站点下再登录一下,然后写入到其他站点下的cookie中,最后跳回至用户想登录的那个站点。具体见下图:

cookie + jsonp方案实现单点登录

说明:本次讲解第1种方案(cookie+jsonp)。

实现步骤:

1. 准备三个域名:  a.com,  b.com,  c.com

2. 配置三个虚拟主机。

3. 添加host域名解析。

4. 这3个站点的登录入口统一定位至a站下:http://a.com/login.php

这3个站点的退出入口统一定位至a站下:http://a.com/logout.php

每个站下均设计一个 “我要发帖”链接,地址为:http://网址/addnews.php在这个addnews.php里检测是否登录,用它来验证单点登录和退出功能是否成功。

现在为每个站点下均创建一个index.php页面,这个页面里均含上述三个链接。同时在链接中传递当前的域名,以便在用户登录成功后回跳。

(1) a站点下的index.php

(2) b站点下的index.php

(3) c站点下的index.php

5. 这3个站点的登录入口统一定位至a站的login.php下,在这个文件中,首先展示用户名和密码提交表单,提交之后比对用户名和密码是否正确,如果正确,就将用户名写入本站的cookie中,然后携带用户名和密码跳转到a站下的success中间页。

其他站点中也有login.php,只用来比对通过ajax传递过来的用户名和密码。

(1) a.com下的login.php

当用户在任一站点下点击登录时(比如c.com),就会链接到a.com下的login页面

(2) b.com下的login.php.(这个文件暂时还用不着,但是先写好。他是等待来自success.php页面发来请求时才用得上)。 

(3) c.com下的login.php.(这个文件暂时还用不着,但是先写好。他是等待来自success.php页面发来请求时才用得上)。

6. 当用户输入账号密码提交之后,就会进行登录,登录成功之后,跳转至a站点下的success.php页面,在这个页面中,有三个input隐藏域,用来存放用户名、密码和用户想登录的那个站点(当然,你不用这种方式也是可以的),然后将用户名和密码通过jsonp传递至其他站点下在其他站点下再登录一下,登录成功,就将cookie写入对应的站点内。success.php文件如下:

7. 如何检测单点登录功能是否成功?当用户在b.com下点击登录之后,我们在c.com下点击我要发帖功能,如果能提示可以发帖,那就说明单点登录成功了,因为我们在addnews.php中检测了是否登录。

(1) a.com下的addnews.php

(2)   b.com下的addnews.php

(3) c.com下的addnews.php 

8. 至此,单点登录已经成功,经验证,确实能实现单点登录功能。

四.单点退出

1. 原理:单点退出与单点登录的原理是一样的。a.com, b.com, c.com等所有站点的退出都指向同一个地址比如a.com/logout.php,先在a站完成退出(就是使a站的cookie失效),然后跳转至中间页deletecookie.php,用jsonp请求其他站点下的logout.php文件,在其他站点完成退出。

2. 各种准备可以利用单点登录的文件,现在只需要准备各站点下的logout.php和a站点下的中间页deletecookie.php文件即可。

3.各站点下的logout.php

(1)a.com下的logout.php

(2)b.com下的logout.php

(3)c.com下的logout.php

4.a.com站点下的中间页deletecookie.php

5. 单点登录验证:a站点下完成登录,其他站点如b和c也是登录状态。b站点下完成登录,a和c也是登录状态。总之,一处登录,各处登录。

6. 单点退出验证:首先各站点已经处于登录状态,在a站点退出,发现所有站点均已经退出,在b站点退出,也发现其他站点均已经退出。

五.待完善之处

用户名和密码等参数在网络中传输缺乏安全性,最好加密,接收到之后再解密,这样更为安全。

赞(0) 打赏
未经允许不得转载:码农资源网 » 什么是单点登录?单点登录之cookie + jsonp方案实现
分享到

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册