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 循环列出目录内容的函数代码
May 26 PHP
php错误、异常处理机制(补充)
May 07 PHP
PHP中最容易忘记的一些知识点总结
Apr 28 PHP
如何使用php判断服务器是否是HTTPS连接
Jul 05 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
Apr 27 PHP
Smarty环境配置与使用入门教程
May 11 PHP
CI框架中数据库操作函数$this-&gt;db-&gt;where()相关用法总结
May 17 PHP
php版微信公众平台之微信网页登陆授权示例
Sep 23 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
Nov 05 PHP
PHP+MySQL实现消息队列的方法分析
May 09 PHP
PHP实现普通hash分布式算法简单示例
Aug 06 PHP
PHP实现提高SESSION响应速度的几种方法详解
Aug 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
一篇不错的PHP基础学习笔记
2007/03/18 PHP
[原创]php实现子字符串位置相互对调互换的方法
2016/06/02 PHP
js实现图片拖动改变顺序附图
2014/05/13 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
2015/03/05 Javascript
jquery实现鼠标拖拽滑动效果来选择数字的方法
2015/05/04 Javascript
浅谈jQuery构造函数分析
2015/05/11 Javascript
JavaScript中的继承之类继承
2016/05/01 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
JavaScript 字符串常用操作小结(非常实用)
2016/11/30 Javascript
js实现华丽的九九乘法表效果
2017/03/29 Javascript
javascript数组去重常用方法实例分析
2017/04/11 Javascript
详解angularjs实现echart图表效果最简洁教程
2017/11/29 Javascript
纯js实现隔行变色效果
2017/11/29 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
2018/07/12 Javascript
JS执行控制之节流模式实例分析
2018/12/21 Javascript
利用es6 new.target来对模拟抽象类的方法
2019/05/10 Javascript
js使用文件流下载csv文件的实现方法
2019/07/15 Javascript
node 解析图片二维码的内容代码实例
2019/09/11 Javascript
Vue之封装公用变量以及实现方式
2020/07/31 Javascript
[02:32]DOTA2亚洲邀请赛 VG战队巡礼
2015/02/03 DOTA
[01:14]2019完美世界城市挑战赛(秋季赛)全国总决赛精彩花絮
2020/01/08 DOTA
在Python的Django框架中实现Hacker News的一些功能
2015/04/17 Python
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
2015/05/22 Python
用Python写冒泡排序代码
2016/04/12 Python
python排序函数sort()与sorted()的区别
2018/09/18 Python
Python实现手机号自动判断男女性别(实例解析)
2019/12/22 Python
python小白切忌乱用表达式
2020/05/29 Python
python 使用建议与技巧分享(四)
2020/08/18 Python
Python Sqlalchemy如何实现select for update
2020/10/12 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
2020/12/23 Python
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
大学毕业自我鉴定范文
2014/02/03 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
宿舍管理制度范本
2015/08/07 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书
详解Golang如何实现支持随机删除元素的堆
2022/09/23 Python