简单分析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中取得image按钮传递的name值
Oct 09 PHP
在JavaScript中调用php程序
Mar 09 PHP
php实现mysql同步的实现方法
Oct 21 PHP
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
May 07 PHP
php的XML文件解释类应用实例
Sep 22 PHP
php中Array2xml类实现数组转化成XML实例
Dec 08 PHP
php cli配置文件问题分析
Oct 15 PHP
PHP 常用时间函数资料整理
Oct 22 PHP
thinkPHP实现签到功能的方法
Mar 15 PHP
php简单构造json多维数组的方法示例
Jun 08 PHP
Laravel5框架添加自定义辅助函数的方法
Aug 01 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
Aug 24 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
Windows下的PHP安装pear教程
2014/10/24 PHP
php查询相似度最高的字符串的方法
2015/03/12 PHP
详谈PHP编码转换问题
2015/07/28 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
2019/06/12 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
2019/08/27 PHP
PHP设计模式之 策略模式Strategy详解【对象行为型】
2020/05/01 PHP
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式
2015/10/09 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
js点击按钮实现带遮罩层的弹出视频效果
2015/12/19 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
AngularJs基于角色的前端访问控制的实现
2016/11/07 Javascript
JS组件系列之MVVM组件 vue 30分钟搞定前端增删改查
2017/04/28 Javascript
nuxt+axios解决前后端分离SSR的示例代码
2017/10/24 Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
2017/12/25 jQuery
iview table高度动态设置方法
2018/03/14 Javascript
微信小程序开发之路由切换页面重定向问题
2018/09/18 Javascript
vue如何安装使用Quill富文本编辑器
2018/09/21 Javascript
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
实例解析Python设计模式编程之桥接模式的运用
2016/03/02 Python
Python对列表中的各项进行关联详解
2017/08/15 Python
python使用pandas实现数据分割实例代码
2018/01/25 Python
python Opencv将图片转为字符画
2021/02/19 Python
python中使用iterrows()对dataframe进行遍历的实例
2018/06/09 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
Athleta官网:购买女士瑜伽服、技术运动服和休闲运动服
2020/11/12 全球购物
药物学专业学生的自我评价
2013/10/27 职场文书
医学检验专业个人求职信范文
2013/12/04 职场文书
大学生咖啡店创业计划书
2014/01/21 职场文书
家长给孩子的评语
2014/01/30 职场文书
汽车促销活动方案
2014/03/31 职场文书
委托书怎么写
2014/07/31 职场文书
争先创优个人总结
2015/03/04 职场文书
三八节活动简报
2015/07/20 职场文书