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 memcache扩展的三种安装方法
Apr 26 PHP
yii2.0之GridView自定义按钮和链接用法
Dec 15 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
May 17 PHP
php使用pdo连接sqlite3的配置示例
May 27 PHP
thinkphp3.2.3 分页代码分享
Jul 28 PHP
10个值得深思的PHP面试题
Nov 14 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
Feb 04 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
Mar 04 PHP
thinkPHP5.0框架命名空间详解
Mar 18 PHP
php7安装yar扩展的方法详解
Aug 03 PHP
Laravel find in set排序实例
Oct 09 PHP
PHP safe_mode开启对于PHP系统函数有什么影响
Nov 10 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实现根据图片色界在不同位置加水印的方法
2015/08/08 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
给网站上的广告“加速”显示的方法
2007/04/08 Javascript
js 浮动层菜单收藏
2009/01/16 Javascript
JQuery中getJSON的使用方法
2010/12/13 Javascript
js使用函数绑定技术改变事件处理程序的作用域
2011/12/26 Javascript
javascript事件冒泡实例分析
2015/05/13 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
全面解析Bootstrap表单使用方法(表单样式)
2015/11/24 Javascript
switch语句的妙用(必看篇)
2016/10/03 Javascript
JavaScript表单验证开发
2016/11/23 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
2017/04/02 jQuery
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
vue如何在项目中调用腾讯云的滑动验证码
2020/07/15 Javascript
python开发中module模块用法实例分析
2015/11/12 Python
selenium+python实现自动登录脚本
2018/04/22 Python
完美解决在oj中Python的循环输入问题
2018/06/25 Python
Python小进度条显示代码
2019/03/05 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
Python通过VGG16模型实现图像风格转换操作详解
2020/01/16 Python
python tkinter之 复选、文本、下拉的实现
2020/03/04 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
python模块如何查看
2020/06/16 Python
python单例模式的应用场景实例讲解
2021/02/24 Python
Wiggle美国:英国骑行、跑步、游泳、铁人三项商店
2018/10/27 全球购物
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
Visual-Click葡萄牙:欧洲领先的在线眼镜商
2020/02/17 全球购物
工业设计专业推荐信
2013/10/29 职场文书
优秀大学生的自我评价
2014/01/16 职场文书
家装业务员岗位职责
2015/04/03 职场文书
早恋主题班会
2015/08/14 职场文书
运动会广播稿20字
2015/08/19 职场文书
一个家长教育孩子的心得体会
2016/01/15 职场文书
图解排序算法之希尔排序Java实现
2021/06/26 Java/Android
漫画《尖帽子的魔法工坊》宣布动画化
2022/04/06 日漫