简单分析ucenter 会员同步登录通信原理


Posted in PHP onAugust 25, 2014

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://rayibeauty.ck101.com/api/uc.php?time=1408327309&code=bc6bFLa6WH343nin2GAn%2F82Y9cnCennPk1gcLGYHdQF4wsXsOSdTyqBb2Nuoxe0UJqzWMWncdx%2FfQ1GK6FS%2BqJqi2AxVG2Oq1pD9c1wZy%2BgjXs7qo4mm2sxFVHwW7JnjKGPDkVdDqtYeybkSISz7yrdb0ZFuXH2yr3Cq" reload="1"></script>

<script type="text/javascript" src="http://kibeauty.ibeauty.tw/api/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 常用类整理
Dec 23 PHP
php中获取关键词及所属来源搜索引擎名称的代码
Feb 15 PHP
探讨php中header的用法详解
Jun 07 PHP
解析php中session的实现原理以及大网站应用应注意的问题
Jun 17 PHP
解析php取整的几种方式
Jun 25 PHP
PHP文件上传判断file是否己选择上传文件的方法
Nov 10 PHP
PHP生成条形图的方法
Dec 10 PHP
zend framework重定向方法小结
May 28 PHP
PHP实现负载均衡下的session共用功能
Apr 17 PHP
PHP配置ZendOpcache插件加速
Feb 14 PHP
php tpl模板引擎定义与使用示例
Aug 09 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
Dec 16 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
Aug 25 #PHP
ThinkPHP查询返回简单字段数组的方法
Aug 25 #PHP
php防止伪造数据从地址栏URL提交的方法
Aug 24 #PHP
php批量删除数据库下指定前缀的表以prefix_为例
Aug 24 #PHP
一个图片地址分解程序(用于PHP小偷程序)
Aug 23 #PHP
PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程
Aug 23 #PHP
PHP+MYSQL会员系统的开发实例教程
Aug 23 #PHP
You might like
加强版phplib的DB类
2008/03/31 PHP
用php实现的获取网页中的图片并保存到本地的代码
2010/01/05 PHP
php自动给文章加关键词链接的函数代码
2012/11/29 PHP
购物车实现的几种方式优缺点对比
2018/05/02 PHP
浅谈laravel orm 中的一对多关系 hasMany
2019/10/21 PHP
不错的新闻标题颜色效果
2006/12/10 Javascript
Firefox div高度自适应
2009/04/28 Javascript
JQery 渐变图片导航效果代码 漂亮
2010/01/01 Javascript
JSON 数字排序多字段排序介绍
2013/09/18 Javascript
jquery图片滚动放大代码分享(1)
2015/08/25 Javascript
js实现n秒倒计时后才可以点击的效果
2015/12/20 Javascript
jQuery中$.each()函数的用法引申实例
2016/05/12 Javascript
Canvas 制作动态进度加载水球详解及实例代码
2016/12/09 Javascript
原生JS京东轮播图代码
2017/03/22 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
webpack多入口多出口的实现方法
2018/08/17 Javascript
使用异步组件优化Vue应用程序的性能
2019/04/28 Javascript
[02:09]抵达西雅图!中国军团加油!
2014/07/07 DOTA
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
基于python实现的抓取腾讯视频所有电影的爬虫
2016/04/22 Python
python3.5仿微软计算器程序
2020/03/30 Python
python 字符串转列表 list 出现\ufeff的解决方法
2017/06/22 Python
Django框架实现的简单分页功能示例
2018/12/04 Python
Python小进度条显示代码
2019/03/05 Python
Python字符串内置函数功能与用法总结
2019/04/16 Python
Python+PyQT5的子线程更新UI界面的实例
2019/06/14 Python
django基于cors解决跨域请求问题详解
2019/08/06 Python
Python实现自动整理文件的脚本
2020/12/17 Python
HTML5中新标签和常用标签详解
2014/03/07 HTML / CSS
大女孩胸罩:Big Girls Bras
2016/12/15 全球购物
美国领先的精品家居照明和装饰产品在线零售商:LightsOnline.com
2018/01/23 全球购物
CHARLES & KEITH加拿大官网:新加坡时尚品牌
2020/03/26 全球购物
顶撞领导检讨书
2014/01/29 职场文书
《找不到快乐的波斯猫》教学反思
2014/02/24 职场文书
家属答谢词
2015/01/05 职场文书
干部考核工作总结
2015/08/12 职场文书