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环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
Oct 17 PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
Apr 29 PHP
yii2.0之GridView自定义按钮和链接用法
Dec 15 PHP
PHP基于MySQL数据库实现对象持久层的方法
Jun 17 PHP
php抓取并保存网站图片的实现代码
Oct 28 PHP
PHP文件上传处理案例分析
Oct 15 PHP
PHP检测数据类型的几种方法(总结)
Mar 04 PHP
PHP+MySQL实现消息队列的方法分析
May 09 PHP
php支付宝系列之电脑网站支付
May 30 PHP
YII框架关联查询操作示例
Apr 29 PHP
PHP手机号码及邮箱正则表达式实例解析
Jul 11 PHP
宝塔面板在NGINX环境中TP5.1如何运行?
Mar 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
window+nginx+php环境配置 附配置搭配说明
2010/12/29 PHP
PHP PDOStatement::columnCount讲解
2019/01/30 PHP
javascript之大字符串的连接的StringBuffer 类
2007/05/08 Javascript
JavaScript数字和字符串转换示例
2014/03/26 Javascript
用js格式化金额可设置保留的小数位数
2014/05/09 Javascript
JS不能跨域借助jquery获取IP地址的方法
2014/08/20 Javascript
《JavaScript高级编程》学习笔记之object和array引用类型
2015/11/01 Javascript
jQuery根据name属性进行查找的用法分析
2016/06/23 Javascript
Javascript之面向对象--方法
2016/12/02 Javascript
nodejs个人博客开发第二步 入口文件
2017/04/12 NodeJs
jquery append与appendTo方法比较
2017/05/24 jQuery
AngularJs定时器$interval 和 $timeout详解
2017/05/25 Javascript
简单实现js鼠标跟随效果
2020/08/02 Javascript
快速理解 JavaScript 中的 LHS 和 RHS 查询的用法
2017/08/24 Javascript
使用原生js+canvas实现模拟心电图的实例
2017/09/20 Javascript
浅谈angular4.0中路由传递参数、获取参数最nice的写法
2018/03/12 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
Python中input与raw_input 之间的比较
2017/08/20 Python
windows下搭建python scrapy爬虫框架步骤
2018/12/23 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
python查找重复图片并删除(图片去重)
2019/07/16 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
2020/10/15 Python
Python ellipsis 的用法详解
2020/11/20 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
2020/12/16 Python
澳大利亚领先的在线机械五金、园艺和存储专家:Edisons
2018/03/24 全球购物
德国黑胶唱片、街头服装及运动鞋网上商店:HHV
2018/08/24 全球购物
BLACKMORES澳洲官网:澳大利亚排名第一的保健品牌
2018/09/27 全球购物
一套Delphi的笔试题一
2016/02/14 面试题
电气个人求职信范文
2014/02/04 职场文书
小学语文教学经验交流材料
2014/06/02 职场文书
自习课吵闹检讨书范文
2014/09/26 职场文书
党员反四风学习心得体会
2016/01/22 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
Pytorch 使用tensor特定条件判断索引
2021/04/08 Python
python实现简易自习室座位预约系统
2021/06/30 Python