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

摘要:
$ucsynlogin=$this->)和控制器方法($a=getgpc('a');6) 输入usercontrol()类所在的文件;HTML<<&书信电报!script type=“text/javascript”src=“http://ssob.fc_lamp.com/index.php;&lt:}ssob_index.php;

原文地址: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="http://t.zoukankan.com/davidwang456-p-4506404.html"'.$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 

   

discuz(dz) SSO(单点,同歩,异步)登录 - fc-lamp - fc-lamp的博客

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

discuz(dz) SSO(单点,同歩,异步)登录 - fc-lamp - fc-lamp的博客

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

免责声明:文章转载自《discuz(dz) SSO(单点,同歩,异步)登录 --转》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇java版本的escape和unescape函数Solr 入门实战(2)--SolrCloud 简介及安装下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

torch 深度学习(3)

torch 深度学习(3) 损失函数,模型训练 前面我们已经完成对数据的预处理和模型的构建,那么接下来为了训练模型应该定义模型的损失函数,然后使用BP算法对模型参数进行调整 损失函数 Criterion 加载包 require 'torch' require 'nn' -- 各种损失函数也是 'nn'这个模块里面的 设定命令行参数 if...

phpstorm快捷键

phpstorm快捷键: // ctrl+shift+n 查找文件 // ctrl+j 插入活动代码提示 // ctrl+alt+t 当前位置插入围绕代码 // alt+insert 生成代码菜单 // ctrl+q 查看代码凝视 // ctrl+d...

WebMethod框架:实现Web服务的更高效方法

WebMethod框架:实现Web服务的更高效方法 关键词:WebMethod   在 Microsoft .NET 中,目前有两种截然不同的方法来实现基于 HTTP 的 Web 服务。第一种同时也是最低级的方法是编写一个自定义 IHttpHandler 类并将它插入到 .NET HTTP 管道中。这种方法要求您使用 System.Web API...

WPF下的右键菜单隐藏

WPF中,右键菜单一旦设置,就很难控制其不让打开,点击右键一定会弹出,如果只是隐藏几个项还是没问题的,但是如果所有项都隐藏了,还是会弹出一个空白内容的右键菜单,难看死,也没有给任何后台控制的方法,于是找到了一个前台的属性可以控制。 <Window x:Class="WPFTest.Window1" xmlns="http://sche...

矩阵求逆c++实现

矩阵求逆c++实现 http://www.2cto.com/kf/201405/297388.html 2014-05-02     我来说两句    来源:矩阵求逆c++实现   收藏    我要投稿 高斯消元法可以用来找出一个可逆矩阵的逆矩阵。设A 为一个N * N的矩阵,其逆矩阵可被两个分块矩阵表示出来。将一个N * N单位矩阵 放在...

SQL必知必会学习笔记

2.5  select SELECT       要返回的列或表达式     是FROM          从中检索数据的表        仅在从表选择数据时使用where        行级过滤                      否group by  分组说明                      仅在按组计算聚集时使用having     ...