首先我们先来了解下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示例分析相关推荐

  1. php ucenter单点登录,UCenter的应用整合与单点登录分析

    一直在用康盛的产品,自然少不了单点登陆,最近重新研究了下ucenter的机制,其实它的基本原理就一句话:跨域设置用户信息.下面只对用户登陆做比较详细说明,其他注册.PM等操作其实原理差不多. 用户登陆 ...

  2. ucenter单点登录

    ucenter单点登录原理是跨域设置用户信息. 实现的关键: ucenter文件与应用的融合 融合方式包括模块,或第三方库,如果将ucenter做成自己应用的模块,建议对ucenter中client. ...

  3. php ucenter原理,深入挖掘Discuz Ucenter同步登录过程原理分析

    深入挖掘discuz ucenter同步登录过程原理分析,哈哈,其实纯属标题党,主要就是做了一个思路分析而已. Discuz是Ucenter的一个应用. Ucenter包含Server和Client, ...

  4. php 单点登录实现代码,PHP简单实现单点登录功能示例

    1.准备两个虚拟域名 127.0.0.1  www.openpoor.com 127.0.0.1  www.myspace.com 2.在openpoor的根目录下创建以下文件 index.PHP 1 ...

  5. PHP简单实现单点登录功能示例

    1.准备两个虚拟域名 127.0.0.1  www.openpoor.com 127.0.0.1  www.myspace.com 2.在openpoor的根目录下创建以下文件 index.PHP 1 ...

  6. 单点登录 Ucenter 分析

    首先我们先来了解下 Ucenter登录步骤 1.用户登录discuz,通过logging.php文件中的函数uc_user_login对post过来的数据进行验证,也就是对username和passw ...

  7. UCenter单点登录,同步登录,同步登出原理

    UCenter同步流程: 前提是需要在Ucenter上面添加好需要同步登录的应用(至少2个才能看到效果),并且显示:通信成功 假如我添加了A,B两个应用网站 1.首先当A站登录时,登录成功后,处理实质 ...

  8. discuz 单点登录 ucenter

    下载demo : http://download.csdn.net/download/knight_black_bob/9863051 1.从"discuz-ucenter-api-for- ...

  9. php ucenter home登录,UCenter Home 2.0 安装方法详细介绍

    本教程为大家介绍 UCenter Home 2.0 的安装方法(以虚拟主机为例).在安装 UCenter Home 2.0 之前,请确认在服务器上已经安装过 UCenter ,UCenter 的安装方 ...

最新文章

  1. Navigator 对象 深入研究
  2. 【赠书】掌握人工智能重要主题,深度强化学习实践书籍推荐
  3. 深数据 - Deep Data
  4. CAN总线的初步认识
  5. 记一次小米前端面试题(一面)2020.10.28
  6. SAP Commerce Cloud 里的 Media 概念简述
  7. go并发编程-理解不同并发场景下的go原语
  8. 中国联通回应裁员传闻:严重不实 勿传勿信
  9. 个人博客系统(附源码)
  10. java 语音发声_单词打字练习java程序(发音、朗读)
  11. 自学软件测试需要学到哪些内容?
  12. Pwn-2018_HITB_CTF-gundam
  13. SpringUtil 工具类
  14. 给刚入市朋友的几点建议
  15. JavaScript 教程「3」:数据类型
  16. 有什么JAVA 网站或者论坛资料丰富呢
  17. 基于YOLOV3实现交通标志识别(Pytorch实现)
  18. java毕业生设计伊伊物流公司的管理系统计算机源码+系统+mysql+调试部署+lw
  19. Andriod入门级开发
  20. 搭建AI智能语音外呼系统 智能语音外呼机器人

热门文章

  1. 2022年金属非金属矿山(地下矿山)安全管理人员特种作业证考试题库模拟考试平台操作
  2. 关于VS2013/VS2019使用scanf函数等报错的解决方案
  3. 360浏览器本地备份文件
  4. vue实现rtsp视频直播流
  5. 程序员必修之路---离职与劳动仲裁的纠纷解决
  6. 订单波次出库详解:流程、系统与设备
  7. 小小滑块可笑可笑-安卓滑块验证码通杀方案研究(5)
  8. 青岛外贸出口企业邮箱域名注册,做外贸企业邮箱重要吗?
  9. wvp+zlmediakit实现国标28181对讲
  10. 是什么让文档管理软件(DMS)用户友好?