A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 上海分校-小影 于 2018-5-18 10:15 编辑

单点登录专题之一

                                 上海传智播客  崔长春老师

一.什么是单点登录?
多个系统,只需要一次登录就能访问所有系统,只需要一次退出就能退出所有系统。这就是单点登录。
典型案例:淘宝和天猫。只需要登录其中一个,另一个就无需重复登录。
好处:提高了用户体验。

二.单点登录常见方案:
1. cookie + jsonp 实现跨域
2. session入库 + redis(memcache)
如何选择?
对于需要频繁验证用户登录状态的系统,使用session+redis;例如电商系统,典型代表如taobao.com+tmall.com
对于不需要频繁验证用户是否登录的系统,使用cookie + jsonp跨域;例如搜狐旗下的站群系统,典型代表是sogou.com + 17173.com + focus.cn + chinaren.com

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

说明:本次讲解第1种方案(cookie+jsonp),下次讲解第2种方案(session+redis)
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.html页面,这个页面里均含上述三个链接。同时在链接中传递当前的域名,以便在用户登录成功后回跳。
(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中检测了是否登录。addnews.php代码如下:
(1) a.com下的addnews.php:
(2)   b.com下的addnews.php:
(3) c.com下的addnews.php
8. 至此,单点登录已经成功,经验证,确实能实现单点登录功能。单点退出与此类似,读者可自行模仿写出。  
9. 待完善之处:用户名和密码在网络中传输最好加密,接收到之后再解密,这样更为安全。

评分

参与人数 1黑马币 +5 收起 理由
契阔 + 5 很给力!

查看全部评分

8 个回复

倒序浏览
6666666666666666666666666666666
回复 使用道具 举报
道友大才 写的很有道理 学习了 最后 给你6666666666666666666666666666
回复 使用道具 举报

6666666666666666666666666666666
回复 使用道具 举报
奈斯
回复 使用道具 举报
回复 使用道具 举报
奈斯,优秀
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马