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 一个页面执行时间类代码
Mar 05 PHP
PHP 第二节 数据类型之数值型
Apr 28 PHP
解析curl提交GET,POST,Cookie的简单方法
Jun 29 PHP
php通过数组实现多条件查询实现方法(字符串分割)
May 06 PHP
PHP中执行cmd命令的方法
Oct 11 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
Feb 26 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
Mar 21 PHP
PHP微信开发之模板消息回复
Jun 24 PHP
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
Feb 04 PHP
php+Memcached实现简单留言板功能示例
Feb 15 PHP
PHP JWT初识及其简单示例
Oct 10 PHP
Yii框架组件的事件机制原理与用法分析
Apr 07 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 pathinfo()获得文件的路径、名称等信息说明
2011/09/13 PHP
探讨GDFONTPATH能否被winxp下的php支持
2013/06/21 PHP
PHP列出MySQL中所有数据库的方法
2015/03/12 PHP
PHP经典面试题之设计模式(经常遇到)
2015/10/15 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
2016/07/23 PHP
PHP7新特性
2021/03/09 PHP
HTML-CSS群中单选引发的“事件”
2007/03/05 Javascript
Javascript 构造函数,公有,私有特权和静态成员定义方法
2009/11/30 Javascript
javascript中的prototype属性实例分析说明
2010/08/09 Javascript
Javascript倒计时页面跳转实例小结
2013/09/11 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
2015/10/26 Javascript
jQuery实现的左右移动焦点图效果
2016/01/14 Javascript
一道常被人轻视的web前端常见面试题(JS)
2016/02/15 Javascript
用canvas 实现个图片三角化(LOW POLY)效果
2016/02/18 Javascript
由浅入深剖析Angular表单验证
2016/07/14 Javascript
js实现日历的简单算法
2017/01/24 Javascript
AngualrJs清除定时器遇到的坑
2017/10/13 Javascript
bootstrapTable+ajax加载数据 refresh更新数据
2018/08/31 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
2019/03/05 Javascript
vue使用vuex实现首页导航切换不同路由的方法
2019/05/08 Javascript
前端天气插件tpwidget使用方法详解
2019/06/24 Javascript
如何通过JS实现日历简单算法
2020/10/14 Javascript
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
为什么说Python可以实现所有的算法
2019/10/04 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
python编程的核心知识点总结
2021/02/08 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
html5定制表单_动力节点Java学院整理
2017/07/11 HTML / CSS
使用HTML5 Canvas为图片填充颜色和纹理的教程
2016/03/21 HTML / CSS
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
shell变量的作用空间是什么
2013/08/17 面试题
应届大专生求职信
2014/06/26 职场文书
关于python爬虫应用urllib库作用分析
2021/09/04 Python
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL
Nginx实现负载均衡的项目实践
2022/03/18 Servers