原文地址:http://fc-lamp.blog.163.com/blog/static/1745666872012762520123/

discuz(dz) SSO(单点,同歩,异步)登录

 一般流程:

  1 发起请求:

1 )登录请求到 localhost/member.php  初始化一些设置,然后调用source/module/member/member_logging.php(37行)。

2)在member_logging.php里实例化登录控制类(new logging_ctl 20行),并调用其 on_login() 方法,logging_ctl 类在class_member.php 文件里。

3)  进入source/class/class_member.php文件在logging_ctl类的on_login()方法里进行登录操作,具体为:在108行调用userlogin()方法完成本地登录。如一切正常($result ['status'] > 0)在149行调用setloginstatus()设置登录状态。

在走到153行,$ucsynlogin = $this->setting ['allowsynlogin'] ? uc_user_synlogin ( $_G ['uid'] ) : '';这句表明如果设置的单点登录,那么就进行其应用的登录认证,即调用“uc_user_synlogin() ”。

4)调用"uc_user_synlogin ()"方法,进入到uc_client/client.php文件,在"uc_user_synlogin ()"方法里又调用"uc_api_post()"方法(313行),最终是使用socket 方式的向 localhost/uc_server(即 UC_API)/index.php发起请求。

5) 在 uc_server/index.php 里获取到控制器名($m = getgpc('m');)及控制器的方法($a = getgpc('a');)

然后在实例化控制器并调用相关方法(62行),这里$m是user,$a是synlogin即为:

$control = new usercontrol();

$control->onsynlogin();

6) 进入usercontrol() 类所在文件:uc_client/control/user.php  在33行即为应用例表单点登录的通知方法(onsynlogin)。

我们可以看到,这里只是循环输出了一段JS代码,加载JS源码的 src=""'.$app['url'].'/api/uc.php......." 属性即为应用的URL地址,而UC的用户同歩登录的API地址即为:localhost/api/uc.php,后面带两个参数 一是时间戳time,二是code其值是由用户名,用户ID等组成的URL参数字符串被加密后的结果。

2 响应请求:

进行一些认证处理后,在api/uc.php 文件第 196行synlogin()方法里设置登录成功认证标识,即:设置"auth" COOKIE。

二 简单模

   1 说明:

      假设我有两个子域:http://ssoa.fc_lamp.com   http://ssob.fc_lamp.com

当我从ssoa 登录时,ssob 就同歩登录了。

  2 过程

     由于这里我只是简单模拟,所以代码相当粗糙

     ssoa_index.php:

 

<?php

echo <<<HTML

<html>

<head>

<title>This is SSOA Page</title>

</head>

<p>

This is SSOA Page

</p>

</html>

HTML;

if(isset($_GET['a']) and $_GET['a']=='login')

{

//请求应用

echo <<<HTML

<p>Loing Success!!</p>

<script type="text/javascript" src="http://ssob.fc_lamp.com/index.php?a=login"></script>

HTML;

}

   ssob_index.php:

 

<?php

if (isset ( $_GET ['a'] ) and $_GET ['a'] == 'login')

{

header ( 'P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"' );

setcookie ( 'myauth', 'test_success', time()+3600, '/' );

exit ( 1 );

}

echo <<<HTML

<html>

<head>

<title>This is SSOB Page</title>

</head>

<p>

This is SSOB Page

</p>

</html>

HTML;

//查看结果

if (isset ( $_COOKIE ['myauth'] ))

{

var_dump ( $_COOKIE ['myauth'] );

}

我们请求http://ssoa.fc_lamp.com/index.php?a=login

我们再来查看:http://ssob.fc_lamp.com/index.php

另:关于SESSION,COOKIE问题参看http://fc-lamp.blog.163.com/blog/static/17456668720111029280317/

discuz(dz) SSO(单点,同歩,异步)登录 --转相关推荐

  1. drcom宽带认证登录超时_开发SSO单点登录需要注意的问题

    一.单点登录系统开发需要注意的问题 1.单点登录系统需要支持jsonp请求? 单点登录系统主要是向其他系统提供用户身份验证服务,因此需要提供对外接口,而外部系统通过接口访问时,必然涉及跨域问题,因此需 ...

  2. SSO单点登录、跨域重定向、跨域设置Cookie、京东单点登录实例分析

    最近在研究SSO单点登录技术,其中有一种就是通过js的跨域设置cookie来达到单点登录目的的,下面就已京东商城为例来解释下跨域设置cookie的过程 涉及的关键知识点: 1.jQuery ajax跨 ...

  3. java和Discuz论坛实现单点登录,通过Ucenter(用户管理中心)

    果学网-专注IT在线www.prismcollege.com 1,按照下面各大链接的教程,把Base64,Client,PHPFunctions,UC,XMLHelper加入web程序. 2,修改we ...

  4. Spring Cloud云架构 - SSO单点登录之OAuth2.0登录流程(2)

    上一篇是站在巨人的肩膀上去研究OAuth2.0,也是为了快速帮助大家认识OAuth2.0,闲话少说,我根据框架中OAuth2.0的使用总结,画了一个简单的流程图(根据用户名+密码实现OAuth2.0的 ...

  5. [精华][推荐]CAS SSO单点登录服务端客户端学习

    1.了解单点登录 SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: 1) User(多个) 2) Web 应用(多 ...

  6. 学习CAS实现SSO单点登录

    学习CAS实现SSO单点登录 网上找了几篇比较详细的教程,在这记录一下: 原理: CAS实现SSO单点登录原理 教程: 1.CAS实现单点登录(SSO)经典完整教程 2.SSO之CAS单点登录实例演示 ...

  7. 著名ERP厂商的SSO单点登录解决方案介绍一

    著名ERP厂商的SSO单点登录解决方案介绍一 参考文章: (1)著名ERP厂商的SSO单点登录解决方案介绍一 (2)https://www.cnblogs.com/wintersun/p/557148 ...

  8. JAVA springboot ssm b2b2c多用户商城系统源码-SSO单点登录之OAuth2.0登录流程(2)

    上一篇是站在巨人的肩膀上去研究OAuth2.0,也是为了快速帮助大家认识OAuth2.0,闲话少说,我根据框架中OAuth2.0的使用总结,画了一个简单的流程图(根据用户名+密码实现OAuth2.0的 ...

  9. SSO单点登录三种情况的实现方式详解

    SSO单点登录三种情况的实现方式详解 单点登录(SSO--Single Sign On)对于我们来说已经不陌生了.对于大型系统来说使用单点登录可以减少用户很多的麻烦.就拿百度来说吧,百度下面有很多的子 ...

最新文章

  1. php 批量导出excel文件,PHPEXCEL批量导出
  2. linux系统巡检脚本
  3. MyBatis源码- SqlSession门面模式 selectList 源码解析
  4. 图解:从单个服务器扩展到百万用户的系统
  5. 鼠标键盘唤醒计算机,除了按下电源按钮唤醒计算机,WIN10也可以使用鼠标或键盘来唤醒...
  6. 【STM32】FreeRTOS任务相关API
  7. 动态的添加和丢弃关键点---32
  8. Jdk1.8 JUC源码增量解析(2)-atomic-LongAdder和LongAccumulator
  9. [css] display有哪些值?分别说明他们的作用是什么?
  10. 资深程序员的笔记:工作多年对于编程语言的理解,新手建议了解!
  11. Docker网络一览
  12. mysql 递归查询所有父级
  13. PMP考试教材有哪些?
  14. Delphi第三方控件大测评
  15. ERP财务管理系统主要解决的问题有哪些
  16. JPA 之 detach方法的使用及注意事项
  17. 每个故事是一座布满灰尘的城墙
  18. 跨namespace通信
  19. linux系统管理与服务器配置高志君_Linux系统管理与服务器配置
  20. 把java项目打包成安装包,在windows下安装

热门文章

  1. 100多个基础常用JS函数和语法集合大全
  2. python 正则分析nginx日志
  3. 【微软公有云系列】Hyper-v(WinSer 2012 R2)网络虚拟化(三)租户隔离
  4. oracle中取最新的前几条记录(rownum)
  5. softmax函数_数学证明深度学习激活函数从Softmax到Sparsemax
  6. 架构师之路 — 分布式系统 — 分布式一致性难题
  7. Kong APIGW — Plugins — 监控告警、日志审计
  8. 互联网协议 — TLS — 安全四要素
  9. 用 Flask 来写个轻博客 (13) — M(V)C_WTForms 服务端表单检验
  10. NR 5G 协议层服务和功能