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 相关文章推荐
第十一节 重载 [11]
Oct 09 PHP
PHP 高手之路(三)
Oct 09 PHP
php学习 函数 课件
Jun 15 PHP
php 归并排序 数组交集
May 10 PHP
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
May 18 PHP
PHP打开和关闭文件操作函数总结
Nov 18 PHP
php生成唯一的订单函数分享
Feb 02 PHP
Yii数据读取与跳转参数传递用法实例分析
Jul 12 PHP
PHP解压ZIP文件到指定文件夹的方法
Nov 17 PHP
微信公众号实现会员卡领取功能
Jun 08 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
Sep 29 PHP
laravel实现前后台路由分离的方法
Oct 13 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定时发送服务的解决办法
2017/04/23 PHP
php使用crypt()函数进行加密
2017/06/08 PHP
PHP常用header头定义代码示例汇总
2020/08/29 PHP
扩展easyui.datagrid,添加数据loading遮罩效果代码
2010/11/02 Javascript
jquery创建一个ajax关键词数据搜索实现思路
2013/02/26 Javascript
JavaScript实现自己的DOM选择器原理及代码
2013/03/04 Javascript
jquery 定位input元素的几种方法小结
2013/07/28 Javascript
javascript阻止scroll事件多次执行的思路及实现
2013/11/08 Javascript
javascript原始值和对象引用实例分析
2015/04/25 Javascript
详细介绍jQuery.outerWidth() 函数具体用法
2015/07/20 Javascript
Vue.js中数组变动的检测详解
2016/10/12 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
浅谈react+es6+webpack的基础配置
2017/08/09 Javascript
微信小程序实现图片放大预览功能
2020/10/22 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
swiper 自动图片无限轮播实现代码
2018/05/21 Javascript
JavaScript引用类型Object常见用法实例分析
2018/08/08 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
2019/03/29 Javascript
CKeditor4 字体颜色功能配置方法教程
2019/06/26 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
2019/09/11 Javascript
全面解析js中的原型,原型对象,原型链
2021/01/25 Javascript
[52:31]VP vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python实现抓取城市的PM2.5浓度和排名
2015/03/19 Python
Python学习小技巧之列表项的拼接
2017/05/20 Python
python模块导入的细节详解
2018/12/10 Python
如何使用Python 打印各种三角形
2019/06/28 Python
快速解决vue.js 模板和jinja 模板冲突的问题
2019/07/26 Python
pycharm配置QtDesigner的超详细方法
2021/01/25 Python
美国高级工作服品牌:Carhartt
2018/01/25 全球购物
Vilebrequin欧洲官网:法国豪华泳装品牌(男士沙滩裤)
2018/04/14 全球购物
Herschel美国官网:背包、手提袋及配件
2020/03/10 全球购物
汽车专业大学生职业生涯规划范文
2014/01/07 职场文书
法定代表人授权委托书
2014/04/04 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书