简单分析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 相关文章推荐
关于Intype一些小问题的解决办法
Mar 28 PHP
一些使用频率比较高的php函数
Oct 03 PHP
PHP 获取目录下的图片并随机显示的代码
Dec 28 PHP
PHP闭包(Closure)使用详解
May 02 PHP
深入解析php之sphinx
May 15 PHP
基于PHP中的常用函数回顾
Jul 11 PHP
ThinkPHP内置jsonRPC的缺陷分析
Dec 18 PHP
如何把php5.3版本升级到php5.4或者php5.5
Jul 31 PHP
php反射类ReflectionClass用法分析
May 12 PHP
php微信开发之关键词回复功能
Jun 13 PHP
在laravel中实现事务回滚的方法
Oct 10 PHP
PHP7创建销毁session的实例方法
Feb 03 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安全配置
2006/12/06 PHP
PHP中浮点数计算比较及取整不准确的解决方法
2015/01/09 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
laravel使用数据库测试注意事项
2020/04/10 PHP
js中将多个语句写成一个语句的两种方法小结
2007/12/08 Javascript
JS打开图片另存为对话框实现代码
2012/12/26 Javascript
jquery属性过滤选择器使用示例
2013/06/18 Javascript
使用js检测浏览器是否支持html5中的video标签的方法
2014/03/12 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
2015/06/19 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
2015/10/25 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
jQuery form插件之formDdata参数校验表单及验证后提交
2016/01/23 Javascript
Bootstrap模仿起筷首页效果
2016/05/09 Javascript
Jquery $when done then的用法详解
2016/05/20 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
2016/11/09 Javascript
Vue.Draggable实现拖拽效果
2020/07/29 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
webpack v4 从dev到prd的方法
2018/04/02 Javascript
vue项目开发中setTimeout等定时器的管理问题
2018/09/13 Javascript
10行代码实现微信小程序滑动tab切换
2018/12/28 Javascript
JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例
2019/01/29 Javascript
使用layer弹窗,制作编辑User信息页面的方法
2019/09/27 Javascript
Vue实现指令式动态追加小球动画组件的步骤
2020/12/18 Vue.js
python实现提取百度搜索结果的方法
2015/05/19 Python
Python语言的变量认识及操作方法
2018/02/11 Python
数据清洗--DataFrame中的空值处理方法
2018/07/03 Python
20行python代码实现人脸识别
2019/05/05 Python
Scrapy框架实现的登录网站操作示例
2020/02/06 Python
Python django框架 web端视频加密的实例详解
2020/11/20 Python
CSS3制作圆角图片和椭圆形图片
2016/07/08 HTML / CSS
人力管理专业毕业生求职信
2014/02/27 职场文书
车辆转让协议书
2014/04/15 职场文书
小学生勤俭节约演讲稿
2014/08/28 职场文书
皇城相府导游词
2015/02/06 职场文书
《丑小鸭》教学反思
2016/02/19 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书