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
WINDOWS服务器安装多套PHP的另类解决方案
Oct 09 PHP
php 仿Comsenz安装效果代码打包提供下载
May 09 PHP
PHP常用技巧总结(附函数代码)
Feb 04 PHP
2个比较经典的PHP加密解密函数分享
Jul 01 PHP
php实现建立多层级目录的方法
Jul 19 PHP
php实现格式化多行文本为Js可用格式
Apr 15 PHP
了解PHP的返回引用和局部静态变量
Jun 04 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
May 11 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 PHP
Laravel框架实现多个视图共享相同数据的方法详解
Jul 09 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
global.php
2006/12/09 PHP
PHP批量查询WordPress留言者E-mail地址实现方法
2015/02/15 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
php+mysql查询实现无限下级分类树输出示例
2016/10/03 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
Javascript调试之console对象——你不知道的一些小技巧
2017/07/10 Javascript
实例讲解Vue.js中router传参
2018/04/22 Javascript
深入浅析Node.js 事件循环、定时器和process.nextTick()
2018/10/22 Javascript
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
vue3实现v-model原理详解
2019/10/09 Javascript
Vue实现按钮级权限方案
2019/11/21 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
vue 使用rules对表单字段进行校验的步骤
2020/12/25 Vue.js
[02:47]3.19DOTA2发布会 国服成长历程回顾
2014/03/25 DOTA
Python中多线程thread与threading的实现方法
2014/08/18 Python
python中类的一些方法分析
2014/09/25 Python
python 遍历目录(包括子目录)下所有文件的实例
2018/07/11 Python
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
django 多对多表的创建和插入代码实现
2019/09/09 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
python 调用API接口 获取和解析 Json数据
2020/09/28 Python
佳能德国网上商店:Canon德国
2017/03/18 全球购物
HashMap和Hashtable的区别
2013/05/18 面试题
自考生毕业自我鉴定
2013/10/10 职场文书
新闻学毕业生自荐信
2013/11/15 职场文书
公司会议策划方案
2014/05/17 职场文书
社区志愿者活动方案
2014/08/18 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
教师节标语大全
2014/10/07 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
电影红河谷观后感
2015/06/11 职场文书
简述Java中throw-throws异常抛出
2021/08/07 Java/Android
windows10声卡驱动怎么安装?win10声卡驱动安装操作步骤教程
2022/08/05 数码科技
MySQL使用IF语句及用case语句对条件并结果进行判断 
2022/09/23 MySQL