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 相关文章推荐
给多个地址发邮件的类
Oct 09 PHP
基于mysql的论坛(3)
Oct 09 PHP
discuz程序的PHP加密函数原理分析
Aug 05 PHP
str_replace只替换一次字符串的方法
Apr 09 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
Jun 20 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
Oct 14 PHP
php格式化时间戳显示友好的时间实现思路及代码
Oct 23 PHP
PHP中require和include路径问题详解
Dec 25 PHP
php实现向javascript传递数组的方法
Jul 27 PHP
php语言中使用json的技巧及json的实现代码详解
Oct 27 PHP
PHP微信发送推送消息乱码的解决方法
Feb 28 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
Apr 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
mysql建立外键
2006/11/25 PHP
PhpMyAdmin中无法导入sql文件的解决办法
2010/01/08 PHP
基于CI框架的微信网页授权库示例
2016/11/25 PHP
PHP操作Postgresql封装类与应用完整实例
2018/04/24 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
CL vs ForZe BO5 第一场 2.13
2021/03/10 DOTA
Javascript 面向对象 对象(Object)
2010/05/13 Javascript
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
线路分流自动智能跳转代码,自动选择最快镜像网站(js)
2011/10/31 Javascript
JavaScript实现多维数组的方法
2013/11/20 Javascript
javascript动态判断html元素并执行不同的操作
2014/06/16 Javascript
setTimeout学习小结
2017/02/08 Javascript
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
react系列从零开始_简单谈谈react
2017/07/06 Javascript
ReactNative踩坑之配置调试端口的解决方法
2017/07/28 Javascript
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
JavaScript日期工具类DateUtils定义与用法示例
2018/09/03 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
2018/09/20 jQuery
跨域解决之JSONP和CORS的详细介绍
2018/11/21 Javascript
three.js利用射线Raycaster进行碰撞检测
2020/03/12 Javascript
Python中实现远程调用(RPC、RMI)简单例子
2014/04/28 Python
python+matplotlib绘制饼图散点图实例代码
2018/01/20 Python
python读写文件write和flush的实现方式
2020/02/21 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
利用 Canvas实现绘画一个未闭合的带进度条的圆环
2019/07/26 HTML / CSS
科沃斯机器人官网商城:Ecovacs
2016/08/29 全球购物
Dower & Hall官网:英国小众轻奢珠宝品牌
2019/01/31 全球购物
年终奖发放方案
2014/06/02 职场文书
环境工程专业自荐信范文
2014/06/24 职场文书
热情服务标语
2014/10/07 职场文书
就业协议书范本
2014/10/08 职场文书
2015年春节标语口号
2014/12/09 职场文书
六一儿童节开幕词
2015/01/29 职场文书
怎样写观后感
2015/06/19 职场文书
求职信:会计求职的写作技巧
2019/04/24 职场文书