简单分析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 Cookie的一个使用注意点
Nov 08 PHP
PHP基础学习小结
Apr 17 PHP
php生成短网址示例
May 05 PHP
自己写的php中文截取函数mb_strlen和mb_substr
Feb 09 PHP
php按字符无乱码截取中文的方法
Mar 27 PHP
Joomla语言翻译类Jtext用法分析
May 05 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
Dec 07 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
Nov 06 PHP
PHP微信H5支付开发实例
Jul 25 PHP
PHP实现财务审核通过后返现金额到客户的功能
Jul 04 PHP
Laravel第三方包报class not found的解决方法
Oct 13 PHP
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
Apr 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
PHP完整的日历类(CLASS)
2006/11/27 PHP
超强分页类2.0发布,支持自定义风格,默认4种显示模式
2007/01/02 PHP
php检测url是否存在的方法
2015/04/14 PHP
js操作二级联动实现代码
2010/07/27 Javascript
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
2013/05/19 Javascript
js添加table的行和列 具体实现方法
2013/07/22 Javascript
node.js中的fs.createReadStream方法使用说明
2014/12/17 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
2015/02/26 Javascript
纯js代码制作的网页时钟特效【附实例】
2016/03/30 Javascript
JavaScript表单焦点自动切换代码
2016/07/24 Javascript
Bootstrap3 内联单选和多选框
2016/12/29 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
2017/01/03 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
详解Vue路由History mode模式中页面无法渲染的原因及解决
2017/09/28 Javascript
利用JS hash制作单页Web应用的方法详解
2017/10/10 Javascript
Vue组件教程之Toast(Vue.extend 方式)详解
2019/01/27 Javascript
JS扁平化输出数组的2种方法解析
2019/09/17 Javascript
js获取url页面id,也就是最后的数字文件名
2020/09/25 Javascript
[56:38]DOTA2-DPC中国联赛正赛Aster vs Magma BO3 第一场 3月5日
2021/03/11 DOTA
python中字典(Dictionary)用法实例详解
2015/05/30 Python
使用Python脚本生成随机IP的简单方法
2015/07/30 Python
详解django+django-celery+celery的整合实战
2019/03/19 Python
Django利用cookie保存用户登录信息的简单实现方法
2019/05/27 Python
妙用itchat! python实现久坐提醒功能
2019/11/25 Python
澳大利亚当地最大的时装生产商:Cue
2018/08/06 全球购物
澳大利亚最好的电动自行车:Leon Cycle
2020/12/19 全球购物
请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值
2014/09/15 面试题
自考自我鉴定范文
2013/10/30 职场文书
初一地理教学反思
2014/01/16 职场文书
物流毕业生个人的自我评价
2014/02/13 职场文书
大学生第一学年自我鉴定
2014/09/12 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS
使用goaccess分析nginx日志的详细方法
2021/07/09 Servers
oracle删除超过N天数据脚本的方法
2022/02/28 Oracle
Python绘画好看的星空图
2022/03/17 Python