简单分析ucenter 会员同步登录通信原理


Posted in PHP onAugust 25, 2014

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://rayibeauty.ck101.com/api/uc.php?time=1408327309&code=bc6bFLa6WH343nin2GAn%2F82Y9cnCennPk1gcLGYHdQF4wsXsOSdTyqBb2Nuoxe0UJqzWMWncdx%2FfQ1GK6FS%2BqJqi2AxVG2Oq1pD9c1wZy%2BgjXs7qo4mm2sxFVHwW7JnjKGPDkVdDqtYeybkSISz7yrdb0ZFuXH2yr3Cq" reload="1"></script>

<script type="text/javascript" src="http://kibeauty.ibeauty.tw/api/uc.php?time=1408327309&code=206flCqeb%2Faft%2FDFPno9Bvqsb1b0o6XTZdIByOoD7EC11vMrjzC7PaKLo0LF3tGiHwlwZkwdW5VDHq866MGulsco5nekfkL341VWp7BPabnZPNtgG7m4jZpfdx6nVP0LTJLYI%2BkebI7uLm58atk8Ex4sKBj%2FfDkjH%2F8z" reload="1"></script>

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

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

PHP 相关文章推荐
PHP中通过ADO调用Access数据库的方法测试不通过
Dec 31 PHP
PHP之变量、常量学习笔记
Mar 27 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
Jun 09 PHP
php的curl封装类用法实例
Nov 07 PHP
php实现获取文件mime类型的方法
Feb 11 PHP
深入理解PHP中的Streams工具
Jul 03 PHP
ThinkPHP进程计数类Process用法实例详解
Sep 25 PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
Jan 20 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
May 12 PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
Jun 03 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 PHP
PHP如何防止用户重复提交表单
Dec 09 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
Aug 25 #PHP
ThinkPHP查询返回简单字段数组的方法
Aug 25 #PHP
php防止伪造数据从地址栏URL提交的方法
Aug 24 #PHP
php批量删除数据库下指定前缀的表以prefix_为例
Aug 24 #PHP
一个图片地址分解程序(用于PHP小偷程序)
Aug 23 #PHP
PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程
Aug 23 #PHP
PHP+MYSQL会员系统的开发实例教程
Aug 23 #PHP
You might like
老照片 - 几十年前的收音机与人
2021/03/02 无线电
探讨PHP中this,self,parent的区别详解
2013/06/08 PHP
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
2016/04/17 PHP
javascript打开新窗口同时关闭旧窗口
2009/01/16 Javascript
stream.js 一个很小、完全独立的Javascript类库
2011/10/28 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
使用命令对象代替switch语句的写法示例
2015/02/28 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
jQuery Validate表单验证入门学习
2015/12/18 Javascript
微信小程序 Image API实例详解
2016/09/30 Javascript
canvas绘制一个常用的emoji表情
2017/03/30 Javascript
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
2017/04/04 jQuery
vue 左滑删除功能的示例代码
2019/01/28 Javascript
vue项目首屏加载时间优化实战
2019/04/23 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
[01:32:50]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第一场 1月25日
2021/03/11 DOTA
Python入门篇之文件
2014/10/20 Python
django配置连接数据库及原生sql语句的使用方法
2019/03/03 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
python logging模块书写日志以及日志分割详解
2019/07/22 Python
Python 使用多属性来进行排序
2019/09/01 Python
Django admin禁用编辑链接和添加删除操作详解
2019/11/15 Python
python绘制动态曲线教程
2020/02/24 Python
Python使用eval函数执行动态标表达式过程详解
2020/10/17 Python
Python页面加载的等待方式总结
2021/02/28 Python
css3与html5实现响应式导航菜单(导航栏)效果分享
2014/02/12 HTML / CSS
css3中背景尺寸background-size详解
2014/09/02 HTML / CSS
html5页面结构_动力节点Java学院整理
2017/07/10 HTML / CSS
如何查看浏览器对html5的支持情况
2020/12/15 HTML / CSS
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
2015年行政管理人员工作总结
2015/10/15 职场文书
如何用JavaScript实现一个数组惰性求值库
2021/05/05 Javascript