ucenter通信原理分析


Posted in PHP onJanuary 09, 2015

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然后进入登陆模式。

PHP 相关文章推荐
PHP中动态HTML的输出技术
Oct 09 PHP
删除数组元素实用的PHP数组函数
Aug 18 PHP
PHP开发中常用的字符串操作函数
Feb 08 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
Nov 10 PHP
Smarty foreach控制循环次数的实现详解
Jul 03 PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
Apr 18 PHP
ThinkPHP中关联查询实例
Dec 02 PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
Nov 30 PHP
php数组函数array_walk用法示例
May 26 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
Aug 03 PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 PHP
php从数据库读取数据,并以json格式返回数据的方法
Aug 21 PHP
PHP上传文件时自动分配路径的方法
Jan 09 #PHP
PHP中new static() 和 new self() 的区别介绍
Jan 09 #PHP
PHP中的替代语法介绍
Jan 09 #PHP
php获取客户端电脑屏幕参数的方法
Jan 09 #PHP
PHP计算百度地图两个GPS坐标之间距离的方法
Jan 09 #PHP
php实现按照权重随机排序数据的方法
Jan 09 #PHP
PHP实现采集抓取淘宝网单个商品信息
Jan 08 #PHP
You might like
用PHP和ACCESS写聊天室(六)
2006/10/09 PHP
ThinkPHP实现二级循环读取的方法
2014/11/03 PHP
php生成年月日下载列表的方法
2015/04/24 PHP
Yii框架组件和事件行为管理详解
2016/05/20 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
写了一个layout,拖动条连贯,内容区可为iframe
2007/08/19 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
JQuery EasyUI 加载两次url的原因分析及解决方案
2014/08/18 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
2015/03/24 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
2015/09/14 Javascript
jquery制作属于自己的select自定义样式
2015/11/23 Javascript
JS实现的点击表头排序功能示例
2017/03/27 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
JS ES6中setTimeout函数的执行上下文示例
2017/04/27 Javascript
基于js 各种排序方法和sort方法的区别(详解)
2018/01/03 Javascript
vue数据更新UI不刷新显示的解决办法
2020/08/06 Javascript
python模拟Django框架实例
2016/05/17 Python
深入理解python中的闭包和装饰器
2016/06/12 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
Python定时任务sched模块用法示例
2018/07/16 Python
Pandas中resample方法详解
2019/07/02 Python
Python实现一个数组除以一个数的例子
2019/07/20 Python
python元组的概念知识点
2019/11/19 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
用html5绘制折线图的实例代码
2016/03/25 HTML / CSS
Kathmandu美国网站:新西兰户外运动品牌
2019/03/23 全球购物
linux面试题参考答案(2)
2015/12/06 面试题
计算机应用毕业生自荐信
2013/10/23 职场文书
公证委托书标准格式
2014/09/11 职场文书
带香烟到学校抽的检讨书
2014/09/25 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
工程项目合作意向书
2015/05/08 职场文书
教师工作证明范本
2015/06/12 职场文书
会计做账心得体会
2016/01/22 职场文书
解析redis hash应用场景和常用命令
2021/08/04 Redis