php ucenter,单点登录 Ucenter示例分析
首先我们先来了解下Ucenter登录步骤
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的同步原理,再遇到无法同步登陆,或者开发一些与UCenter接口的时候就会容易很多。
大致步骤 首先我们要先安装 ucenter 然后把uc_client 这个文件夹复制到自己的项目里面去 然后呢在配置几个文件
client.php相当于函数库
uc.php相当于回调文件
还有一个 config.inc.php 是配置文件
当你有2个应用都设置了同步登陆之后 当你登陆一个应用 然后执行
include './config.inc.php';
include './uc_client/client.php';
$usernames="feiye";
$passwords="789123";
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自己会在后台把所有开启同步登陆的应用都给循环遍历一遍 然后 在页面上输出
类似这种的js代码 就是发送给每个开启同步登陆的应用 然后 每个开启同步登陆的应用 的 回调文件 uc.php 接受到后 会进行解密 解密好后 其实 你就可以自己来写代码了 这个uc.php回调文件的代码不一定非要按照他们的格式来写 你也可以自己写你自己的代码 比如说我就是根据session来做同步登陆的
function synlogin($get, $post) {
$uid = $get['uid'];
$username = $get['username'];
if(!API_SYNLOGIN) {
return API_RETURN_FORBIDDEN;
}
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
setcookie('gwyy',$username,time()+3600,'/','127.0.0.71');
_setcookie('Example_auth', _authcode($uid."\t".$username, 'ENCODE'));
$_SESSION['username'] = $username;
$_SESSION['uid'] = $uid;
}
function synlogout($get, $post) {
if(!API_SYNLOGOUT) {
return API_RETURN_FORBIDDEN;
}
//note 同步登出 API 接口
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
_setcookie('Example_auth', '', -86400 * 365);
unset($_SESSION['username']);
unset($_SESSION['uid']);
session_destroy();
}
这样 当用户刷新了别的应用页面之后 就自动登陆了
注意 如果在UC里面添加应用 提示通信没有成功 那么原因很简单 就是没有找到你 http://xxxx/api/uc.php 这个文件 只要有这个文件在 那么通信 肯定会成功的
其实UC的原理很简单 就是某个应用登陆后 然后后台轮询发送给同步登陆的应用的回调文件 回调文件接收到用户ID之后 生成cookie或者session然后进入登陆模式。
php ucenter,单点登录 Ucenter示例分析相关推荐
- php ucenter单点登录,UCenter的应用整合与单点登录分析
一直在用康盛的产品,自然少不了单点登陆,最近重新研究了下ucenter的机制,其实它的基本原理就一句话:跨域设置用户信息.下面只对用户登陆做比较详细说明,其他注册.PM等操作其实原理差不多. 用户登陆 ...
- ucenter单点登录
ucenter单点登录原理是跨域设置用户信息. 实现的关键: ucenter文件与应用的融合 融合方式包括模块,或第三方库,如果将ucenter做成自己应用的模块,建议对ucenter中client. ...
- php ucenter原理,深入挖掘Discuz Ucenter同步登录过程原理分析
深入挖掘discuz ucenter同步登录过程原理分析,哈哈,其实纯属标题党,主要就是做了一个思路分析而已. Discuz是Ucenter的一个应用. Ucenter包含Server和Client, ...
- php 单点登录实现代码,PHP简单实现单点登录功能示例
1.准备两个虚拟域名 127.0.0.1 www.openpoor.com 127.0.0.1 www.myspace.com 2.在openpoor的根目录下创建以下文件 index.PHP 1 ...
- PHP简单实现单点登录功能示例
1.准备两个虚拟域名 127.0.0.1 www.openpoor.com 127.0.0.1 www.myspace.com 2.在openpoor的根目录下创建以下文件 index.PHP 1 ...
- 单点登录 Ucenter 分析
首先我们先来了解下 Ucenter登录步骤 1.用户登录discuz,通过logging.php文件中的函数uc_user_login对post过来的数据进行验证,也就是对username和passw ...
- UCenter单点登录,同步登录,同步登出原理
UCenter同步流程: 前提是需要在Ucenter上面添加好需要同步登录的应用(至少2个才能看到效果),并且显示:通信成功 假如我添加了A,B两个应用网站 1.首先当A站登录时,登录成功后,处理实质 ...
- discuz 单点登录 ucenter
下载demo : http://download.csdn.net/download/knight_black_bob/9863051 1.从"discuz-ucenter-api-for- ...
- php ucenter home登录,UCenter Home 2.0 安装方法详细介绍
本教程为大家介绍 UCenter Home 2.0 的安装方法(以虚拟主机为例).在安装 UCenter Home 2.0 之前,请确认在服务器上已经安装过 UCenter ,UCenter 的安装方 ...
最新文章
- Navigator 对象 深入研究
- 【赠书】掌握人工智能重要主题,深度强化学习实践书籍推荐
- 深数据 - Deep Data
- CAN总线的初步认识
- 记一次小米前端面试题(一面)2020.10.28
- SAP Commerce Cloud 里的 Media 概念简述
- go并发编程-理解不同并发场景下的go原语
- 中国联通回应裁员传闻:严重不实 勿传勿信
- 个人博客系统(附源码)
- java 语音发声_单词打字练习java程序(发音、朗读)
- 自学软件测试需要学到哪些内容?
- Pwn-2018_HITB_CTF-gundam
- SpringUtil 工具类
- 给刚入市朋友的几点建议
- JavaScript 教程「3」:数据类型
- 有什么JAVA 网站或者论坛资料丰富呢
- 基于YOLOV3实现交通标志识别(Pytorch实现)
- java毕业生设计伊伊物流公司的管理系统计算机源码+系统+mysql+调试部署+lw
- Andriod入门级开发
- 搭建AI智能语音外呼系统 智能语音外呼机器人