https://www.jb51.net/article/59666.htm

1、用户登录discuz,通过logging.php文件中的函数uc_user_login对post过来的数据进行验证,也就是对username和password进行验证。

2、如果验证成功,将调用位于uc_client下client.php文件中的函数uc_user_synlogin,在这个函数中调用 uc_api_post(‘user', ‘synlogin', array(‘uid'=>$uid))。

3、然后这个函数后向Ucenter的index.php传递数据,index.php接受传递的数据,获得model为user,action为synlogin的值。

4、然后Ucenter的index.php调用control目录下的user.php类中的onsynlogin方法,通过foreach循环,以javascript的方式通知uc应用列表中开启同步登陆的应用进行同步登录;即通过get方式传递给各个应用目录中api下的uc.php一些数据。

5、uc.php接收通知并处理get过来的数据,并在函数synlogin(位于uc.php中)通过函数_authcode加密数据(默认以UC_KEY作为密钥),用函数_setcookie设置cookie。

6、各个应用用对应的密钥解码上面设置的cookie,得到用户id等数据;通过这个值来判断用户是否经过其它应用登录过,从而让用户可以自动登陆。

应用程序的logging.php ——>uc_client中的client.php——>Ucenter——>其他应用程序中的api/uc.php。

其实Ucenter实现同步登陆的原理就是cookie,一个应用登陆成功之后,向Ucenter传递数据,让Ucenter通知其他的应用也设置cookie,这样用户在访问其他应用的时候通过已经设置好的cookie实现自动登陆。

大致步骤 ,首先要安装 ucenter 然后把uc_client 这个文件夹复制到自己的项目里面去 ,然后呢在配置几个文件

client.php相当于函数库
uc.php相当于回调文件
config.php 是配置文件

当你有2个应用都设置了同步登陆之后  当你登陆一个应用 然后执行

复制代码 代码如下:
include ‘./config.inc.php';
include ‘./uc_client/client.php';
$usernames=”kyee”;
$passwords=”123456″;
list($uid, $username, $password, $email) = uc_user_login($usernames, $passwords);
if($uid > 0) {

setcookie(“username”,$username,time()+intval(24*3600));
echo uc_user_synlogin($uid);
echo ‘登录成功';
} elseif($uid == -1) {
echo ‘用户不存在,或者被删除';
} elseif($uid == -2) {
echo ‘密码错误';
} else {
echo ‘未定义';
}

uc_user_synlogin() 这个函数 代表着 要同步登陆到其他所有开启同步登陆的函数  uc自己会在后台把所有开启同步登陆的应用都给循环遍历一遍 然后 在页面上输出

复制代码 代码如下:
<script type=”text/javascript”
src=”http://www.lihuai.net/wp-content/uploads/sp/uc.php?time=1408327309&code=bc6bFLa6WH343nin2GAn%2F82Y9cnCennPk1gcLGYHdQF4wsXsOSdTyqBb2Nuoxe0UJqzWMWncdx%2FfQ1GK6FS%2BqJqi2AxVG2Oq1pD9c1wZy%2BgjXs7qo4mm2sxFVHwW7JnjKGPDkVdDqtYeybkSISz7yrdb0ZFuXH2yr3Cq”
reload=”1″></script>

<script type=”text/javascript”
src=”http://www.lihuai.net/wp-content/uploads/sp/uc.php?time=1408327309&code=206flCqeb%2Faft%2FDFPno9Bvqsb1b0o6XTZdIByOoD7EC11vMrjzC7PaKLo0LF3tGiHwlwZkwdW5VDHq866MGulsco5nekfkL341VWp7BPabnZPNtgG7m4jZpfdx6nVP0LTJLYI%2BkebI7uLm58atk8Ex4sKBj%2FfDkjH%2F8z”
reload=”1″></script>

类似这种的js代码 ,就是发送给每个开启同步登陆的应用, 然后每个开启同步登陆的应用的回调文件 uc.php
接受到后会进行解密,解密好后其实你就可以自己来写代码了,这个uc.php回调文件的代码不一定非要按照他们的格式来写 ,你也可以自己写你自己的代码

其实UC的原理很简单 ,就是某个应用登陆后,然后后台轮询发送给同步登陆的应用的回调文件 ,回调文件接收到用户ID之后,生成cookie或者session然后进入登陆模式。

https://blog.csdn.net/lwx2615/article/details/7487090

使用ucenter进行同步操作,主要依托于ucenter  server 和ucenter client之间的api接口进行通讯。要使得通讯成为可能,首先要通过ucenter管理所用应用(通过配置使得当前应用和ucenter产生联系,也就是通讯成功)。其他应用通过挂接到ucenter的接口上,从而使得某些数据可以进行同步操作。

以登录为例,说明一下

1 由当前应用程序发起登录同步请求,由ucenter server的api接口就收请求并验证相关信息,验证通过,即返回其他应用的相关信息,告诉其他应用进行同步操作

2 当前应用获得返回信息,就是自己的web程序中登录方法中要打印的一段字符串,这段字符串如果不能打印成功,则其他应用程序无法得到ucenter server发送的指令。

3 打印指令(即返回字符串),其实是一段js代码,细看一下,就知道里面包含了通讯成功后的所有应用。

4 其他应用执行接收指令,其实这一步很容易被忽略掉,因为他在打印返回字符串的时候已经执行了。这就是ucenter server 和 ucenter client 之间的api接口之间的通讯。uchome,discuz通过api接收指令,执行同步代码。这样就做到了神不知鬼不觉的同步。

----------

http://www.cnblogs.com/kyee/p/3889462.html

  1. 用户登陆discuz,调用on_login() , on_login ()里调用了userlogin() 验证用户信息,正确的话,调用uc_user_synlogin(),然后调用uc_api_post('user', 'synlogin', array('uid'=>$uid)),向uc_server/index.php 传输数据,model为user,action为synlogin,然后调用uc_server/control/user.php 里的onsynlogin方法,通过foreach循环,以javascript的方式通知uc应用列表中开启同步登陆的应用进行同步登录;discuz自身的ucenter通信到此结束;

  2. discuz外的应用api/uc.php接收通知并处理get过来的数据,并在函数synlogin(位于uc.php中)通过函数authcode加密数据,用函数wp_set_auth_cookie设置cookie。各个应用用对应的密钥解码上面设置的cookie,得到用户id等数据;通过这个值来判断用户是否经过其它应用登录过,从而让用户可以自动登陆。

discuz:

用户登陆

-> /member.php

-> /source/module/member/member_logging.php

-> /source/class/class_member.php(on_login )

-> /uc_client/client.php(uc_user_synlogin

-> uc_api_post('user', 'synlogin', array('uid'=>$uid)) )

-> uc_server/index.php

-> uc_server/control/user.php(onsynlogin)

-> 以javascript 方式通知uc应用列表中开启同步登陆的应用进行同步登录

wordpress:

get方式接受ucenter传过来的数据

-> /wp-content/plugins/ucenter-integration/api/uc.php (synlogin)

-> 通过函数authcode加密数据,用函数wp_set_auth_cookie设置cookie

-> 各个应用用对应的密钥解码上面设置的cookie,得到用户id等数据;通过这个值来判断用户是否经过其它应用登录过,从而让用户可以自动登陆。

UCenter通信原理的更多相关文章

  1. ucenter 通信原理个人总结

    用户登陆discuz,调用on_login() , on_login ()里调用了userlogin() 验证用户信息,正确的话,调用uc_user_synlogin(),然后调用uc_api_pos ...

  2. ucenter 通信原理

    1.用户登录discuz,通过logging.php文件中的函数uc_user_login对post过来的数据进行验证,也就是对username和password进行验证. 2.如果验证成功,将调用位 ...

  3. 基于web的IM软件通信原理分析

    关于IM(InstantMessaging)即时通信类软件(如微信,QQ),大多数都是桌面应用程序或者native应用较为流行,而网上关于原生IM或桌面IM软件类的通信原理介绍也较多,此处不再赘述.而 ...

  4. Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)

    转载地址:http://blog.csdn.net/mad1989/article/details/9147661 ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当 ...

  5. SSL 通信原理及Tomcat SSL 配置

    SSL 通信原理及Tomcat SSL 双向配置 目录1 参考资料 .................................................................. ...

  6. Java 下 SSL 通信原理及实例

    有关SSL的原理和介绍在网上已经有不少,对于Java下使用keytool生成证书,配置SSL通信的教程也非常多.但如果我们不能够亲自动手做一个SSL Sever和SSL Client,可能就永远也不能 ...

  7. AIDL通信原理

    AIDL (Android Interface Definition Language),通过定义通信接口来实现进程间通信.这是Google提供的一种在安卓应用进程间通信的工具.所以要了解AIDL的通 ...

  8. Java基础知识强化之网络编程笔记02:Socket通信原理图解

    1. Socket (1)Socket套接字  网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字 (2)Socket原理机制:  • 通信两端都有Socket.  • 网 ...

  9. Python Socket通信原理

    [Python之旅]第五篇(一):Python Socket通信原理   python Socket 通信理论 socket例子 摘要:  只要和网络服务涉及的,就离不开Socket以及Socket编 ...

随机推荐

  1. MySQL【数值处理函数】的使用方法

    数值处理函数 下边列举一些数学上常用到的函数,在我们的业务中有数学计算时会很有用的: 名称 调用示例 示例结果 描述 ABS ABS(-1) 1 取绝对值 PI PI() 3.131593 返回圆周率 ...

  2. LeetCode 98 验证二叉搜索树

    题目: 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身必须也是 ...

  3. 对弈win32笔记

    对弈的win32笔记   一:Windows程序运行原理 一.Windows四大模块程序 1.1控制台程序 没有自己的窗口,dos-显示或者运行程序,入口mian() 1.2窗口程序 有自己的窗口,w ...

  4. DevExpress v18.2新版亮点——DevExtreme篇(一)

    行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍新版本新功能.本文将介绍了DevExtreme Complete Sub ...

  5. 一些不常用的Oracle用法记录(含模糊查询)

    (一).判断 某字段 是否包含 某字符串 select * from mc_member m where instr(m.bu, 'BU') > 0 --查询bu包含'BU' (二).将 某字段 ...

  6. 18.Canny边缘检测

    Canny边缘检测算法以Canny的名字命名,其中Canny的目标是找到一个最优的边缘检测算法,其有三种衡量标准: 低错误率:标识出尽可能多的实际边缘,同时尽可能的减少噪声产生的误报 高定位性:标识出 ...

  7. Minimum Spanning Trees

    Kruskal’s algorithm always union the lightest link if two sets haven't been linked typedef struct { ...

  8. nginx 配置 同一域名端口下,根据URL 导向不同的项目目录

    我们现在拥有2个项目.但是只有一个域名,通过nginx配置来实现以下url导向不同的项目. 后台管理台:{域名}/admin 用户客户端:{域名}/client server { listen 888 ...

  9. c#错误cs0006

    生成解决方案时报“error CS0006: Metadata file '.../.../.../xxx.dll'could not be found". 错误列表-下拉框选择整个解决方案 ...

  10. MAC IDEA mybatis 逆向工程 无结果文件

    mac下路径是./src windows 路径是.\src 解决方法,将\纠正过来即可