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作的文本留言本的例子(一)
Oct 09 PHP
php 调试利器debug_print_backtrace()
Jul 23 PHP
解析Ubuntu下crontab命令的用法
Jun 24 PHP
PHP导航下拉菜单的实现如此简单
Sep 22 PHP
Laravel框架数据库CURD操作、连贯操作总结
Sep 03 PHP
Yii框架关联查询with用法分析
Dec 02 PHP
php天翼开放平台短信发送接口实现方法
Dec 22 PHP
PHP购物车类Cart.class.php定义与用法示例
Jul 20 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
Sep 26 PHP
php中this关键字用法分析
Dec 07 PHP
PHP获取当前时间不准确问题解决方案
Aug 14 PHP
php png失真的原因及解决办法
Oct 24 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 FTP类的详解
2013/06/13 PHP
浅谈PHP变量作用域以及地址引用问题
2013/12/27 PHP
一个简单安全的PHP验证码类、PHP验证码
2016/09/24 PHP
微信开发之php表单微信中自动提交两次问题解决办法
2017/01/08 PHP
thinkPHP5.0框架模块设计详解
2017/03/18 PHP
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
文本加密解密
2006/06/23 Javascript
jQuery EasyUI API 中文文档 - NumberBox数字框
2011/10/13 Javascript
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
2016/05/12 Javascript
jQuery 中ajax异步调用的四种方式
2016/06/28 Javascript
Angular2表单自定义验证器的实现
2016/10/19 Javascript
Javascript 正则表达式校验数字的简单实例
2016/11/02 Javascript
判断滚动条滑到底部触发事件(实例讲解)
2017/11/15 Javascript
详解设置Webstorm 利用babel将ES6自动转码成ES5
2017/12/20 Javascript
详解小程序缓存插件(mrc)
2018/08/17 Javascript
Vue使用watch监听一个对象中的属性的实现方法
2019/05/10 Javascript
javascript中this的用法实践分析
2019/07/29 Javascript
layui动态加载多表头的实例
2019/09/05 Javascript
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
Collatz 序列、逗号代码、字符图网格实例
2017/06/22 Python
在Python web中实现验证码图片代码分享
2017/11/09 Python
python获取代码运行时间的实例代码
2018/06/11 Python
python将处理好的图像保存到指定目录下的方法
2019/01/10 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
浅析matlab中imadjust函数
2020/02/27 Python
python查询MySQL将数据写入Excel
2020/10/29 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
BOSE德国官网:尽探索之力,享音乐之极
2016/12/11 全球购物
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
房屋租赁协议书范本
2014/04/10 职场文书
高中综合实践活动总结
2014/07/07 职场文书
县长群众路线对照检查材料思想汇报
2014/10/02 职场文书
大三学生英语考试作弊检讨书
2015/01/01 职场文书
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python
解决Git推送错误non-fast-forward的方法
2022/06/25 Servers