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 21 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
Jun 14 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
Jun 29 PHP
PHP中file_exists函数不支持中文名的解决方法
Jul 26 PHP
phpnow php探针环境检测代码
Nov 04 PHP
php实现监控varnish缓存服务器的状态
Dec 30 PHP
php从字符串创建函数的方法
Mar 16 PHP
PHP的自定义模板引擎
Mar 24 PHP
Laravel使用消息队列需要注意的一些问题
Dec 13 PHP
浅谈PHP实现大流量下抢购方案
Dec 15 PHP
PHP chop()函数讲解
Feb 11 PHP
Laravel 在views中加载公共页面的实现代码
Oct 22 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
Blitz templates 最快的PHP模板引擎
2010/04/06 PHP
PHP中foreach循环中使用引用要注意的地方
2011/01/02 PHP
AJAX的跨域访问-两种有效的解决方法介绍
2013/06/22 PHP
PDO实现学生管理系统
2020/03/21 PHP
学习YUI.Ext第七日-View&amp;JSONView Part Two-一个画室网站的案例
2007/03/10 Javascript
JQuery AJAX实现目录浏览与编辑的代码
2008/10/21 Javascript
jQuery示例收集
2010/11/05 Javascript
JavaScript格式化数字的函数代码
2010/11/30 Javascript
javascript:void(0)使用探讨
2013/08/27 Javascript
setTimeout()与setInterval()方法区别介绍
2013/12/24 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
使用jquery局部刷新(jquery.load)从数据库取出数据
2014/01/22 Javascript
php析构函数的具体用法小结
2014/03/11 Javascript
jQuery取消特定的click事件
2016/02/29 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
2016/07/28 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
vue 实现超长文本截取,悬浮框提示
2020/07/29 Javascript
python求crc32值的方法
2014/10/05 Python
numpy.std() 计算矩阵标准差的方法
2018/07/11 Python
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
python实现最大优先队列
2019/08/29 Python
Python3.7下安装pyqt5的方法步骤(图文)
2020/05/12 Python
python dict乱码如何解决
2020/06/07 Python
10个顶级Python实用库推荐
2021/03/04 Python
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
英国最大的在线奢侈手表零售商:Jura Watches
2018/01/29 全球购物
西部世纪面试题
2014/12/05 面试题
渗透攻击的测试步骤
2014/06/07 面试题
自我评价中英文语句
2013/11/30 职场文书
十八大感想感言
2014/02/10 职场文书
法律六进活动方案
2014/03/13 职场文书
追悼会主持词
2014/03/20 职场文书
消防宣传口号
2014/06/16 职场文书
2015羊年春节慰问信
2015/02/14 职场文书
不同意离婚答辩状
2015/05/22 职场文书