`
xuebingnanmm
  • 浏览: 172533 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ucenter单点登陆总结

    博客分类:
  • PHP
阅读更多

一直在用康盛的产品,自然少不了单点登陆,最近重新研究了下ucenter的机制,其实它的基本原理就一句话:跨域设置用户信息

下面只对用户登陆做比较详细说明,其他注册、PM等操作其实原理差不多

1:用户登陆

do_login.php[uchome]

$passport = getpassport($username, $password);

此处操作调用了uc_client下client.php的 uc_user_login($username, $password);

此函数又调用了call_user_func(UC_API_FUNC, 'user', 'login', array())


call_user_func回调UC_API_FUNC, 此处为uc_api_mysql函数,即调用 uc_api_mysql函数,后面的'user', 'login', array()是参数

uc_api_mysql的实质是调用uc_clientcontroller下的user控制器,然后执行onlogin方法

该方法则是判断用户提交信息是否正确,然后返回对应uc_member表的uid


总结:

(1):uchome的用户登陆主要通过uc_client进行操作,判断用户信息是否正确,最终返回对应于uc表的uid, 供单点登陆用

(2):整合自己应用的时候可以不必这么复杂,登陆完全可以走自己的模式,只是要返回下uc表的uid,供单点登陆用即可

2:单点登陆

include 'uc_client/client.php';

uc_user_synlogin($uid);

 

uc_user_synlogin内部则调用uc_api_post('user', 'synlogin', array('uid'=>$uid));

uc_api_post函数的作用是将将数据通过socket发送到ucenter

uc_api_post同时调用uc_api_requestdatauc_fopen2函数

uc_api_requestdata构造发送给用户中心的请求数据

uc_fopen2远程打开URL,本质是调用uc_fopen函数,通过 fsockopen远程打开ucenter/index.php,并且传递参数,调用user控制器执行onsynlogin() 方法,


onsynlogin()读取缓存, 缓存文件保留有各单点登陆应用的基本信息 [比如bbs supersite的基本信息]

然后循环通过JS调用不同应用下api下的uc.php

下一步转移到各应用下的uc.php调用synlogin($get, $post)

header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');

setcookie();

从而实现跨域设置cookie


P3p作用:

比如有2个应用,a.hxwan.com b.hxan.com 另外有个公用的uceter.hxwan.com

uceter.hxwan.com通过JS跨域调用a.hxwan.com b.hxan.com,

这两个脚本都做了设置cookie 的功能,但为了跨域,考虑到不同浏览器[主要考虑IE6],必须调用P3P,实现成功跨域

总结:总的 来说,UCENTER一站登陆原理是socket远程打开uceter, 并且传输已经登陆的公用UIDucnter循环通过JS调用各应用下的api,在各个地方设置cookie,而保证cookie通用的则是P3P处理[注意不同应用下的api脚本不一样,bbsuc.php不同于uchomeuc.php]


3:整合自己的应用

(1)下载UCENTER,并且打好UCENTER的数据表,uc_members表的作用是存储通用的ID数据

(2)在自己的应用下增加uc_client 和 api,这两个目录下的文件需要根据实际情况进行更改

(3)进入ucenter的后台,添加单点登陆的应用

(4)添加单点登陆成功后会出现一些配置信息,在自己的应用下添加config.php, 并且复制配置信息,增加一句 $database = 'mysql';

新版本的UC范例,通信不成功是因为范例目录下的那个config.inc.php少了这句 $database = 'mysql';
导致连不上 include/下的数据库类文件。

至此,基本操作已经完成,另外具体情况则按照自己的应用进行不同的操作

 

4:应用整合其他办法

其实也可以不走单点登陆,全站统一个注册、登陆接口即可,注意各个应用cookie的前缀要一样,考虑跨域的话可以用jquery的jsonp, 此时的注册、登陆得自己写一套,注册、登陆的模式跟原本应用一样就可以啦,比如cookie的加密方式、cookie的作用域以及cookie存储的数据格式

分享到:
评论
1 楼 程序员之家 2013-10-16  
你好
实现的java工程与disucz的 用户整合,但是,在注册新用户后,在调用登录方法,并没有同步,但是,如果再一次,从论坛登录,激活用户。第二次再从Java端登录。就可以实现同步了。怎么让他不需要激活?直接可以登入呀 或者跳到激活页面
这个问题你解决了吗 万分感谢

相关推荐

    UCenter+MediaWiki+Discuz X2实现单点登录

    UCenter+MediaWiki+Discuz X2实现单点登录

    单点登录 Ucenter示例分析

    首先我们先来了解下Ucenter登录步骤 1、用户登录discuz,通过logging.php文件中的函数uc_user_login对post过来的数据进行验证,也就是对username和password进行验证。 2、如果验证成功,将调用位于uc_client下client...

    PHP整合dedecms+ucenter+discuzX,实现单点登录.zip

    PHP整合dedecms+ucenter+discuz三家,实现用户单点登录功能(同步登录与退出).zip

    单点登录源码

    单点登录, SSM框架公共模块 ├── zheng-admin -- 后台管理模板 ├── zheng-ui -- 前台thymeleaf模板[端口:1000] ├── zheng-config -- 配置中心[端口:1001] ├── zheng-upms -- 用户权限管理系统 | ├── ...

    discuz-ucenter-api-for-java

    Discuz3.2与Java 项目整合单点登陆,discuz 和 JAVA 对接需要一个中间件,它就是 Ucenter。Comsenz(康盛)的 UCenter 当前在国内的单点登录领域占据绝对份额,其完整的产品线令 UCenter 成为了账号集成方面事实上的...

    ecshop整合ucenter配置文件

    ecshop整合ucenter配置文件

    PHP版单点登陆实现方案的实例

    本文主要介绍了利用webservice,session,cookie技术,来进行通用的单点登录系统的分析与设计。具体实现语言为PHP。单点 登录,英文名为Single Sign On,简称为 SSO,是目前企业,网络业务的用户综合处理的重要组成...

    ucenter的小总结

    ucenter同步原理 和一些函数的说明以及注释

    Thinkphp整合ucenter同步登录注册退出

    Thinkphp整合ucenter同步登录注册退出

    ucdemo discuz ucenter api for java

    discuz-ucenter-api-for-java discuz 单点登录 ucenter http://knight-black-bob.iteye.com/blog/2378199

    java整合Ucenter统一登陆、退出源码

    java整合Ucenter统一登陆、退出源码,头像、消息、统一认证管理

    ecshop discuz ucenter整合

    [使用技巧] ecshop discuz ucenter整合 1.安装ucenter 2.安装discuz.安装过程中与ucenter集成,不需要我做任何事情 3.安装ecshop 将uc_client拷贝到根目录下....现在我的discuz和ecshop可以同步登陆了。

    UCenter_MediaWiki_Discuz X2.rar

    UCenter+MediaWiki+Discuz X2实现单点登录,发布一般防止丢失以免后续需要找不到了

    UCenter前端界面和后端管理系统

    提供MySQL和 HTTP 两种连接用户中心的模式,使之能将 UCenter 和各应用能灵活部署,可以是单台服务器,也可以是局域网、广域网。 通知失败重发机制,为用户中心与各应用交换数据提供更好的保障。 缓存、模板、日志等...

    UCenter用户中心手册+好的后台管理界面

    UCenter 是今后 Comsenz 旗下各个产品之间信息直接传递的一个桥梁,通过 UCenter 站长可以无缝整合 Comsenz 系列产品,甚至其它更多的第三方应用程序,实现用户的一站式登录,个人信息、积分等的统一管理。...

    ucenter discuz Java api

    ucenter discuz Java api

    ucenter2.2

    如果你的站點之前沒有安裝 UCenter,請先下載並進行安裝。 UCenter 最新版本下載地址: http://download.comsenz.com/UCenter/ 接下來,開始安裝UCenter Home程序。 1. 通過ftp工具,將 ./upload 目錄中的所有文件...

    thinkphp和ucenter的整合

    附近包含有thinkphp的简单测试程序和一般程序,主要功能为两个程序是通过ucenter通信,使这两个程序可实现同步登录和注销,数据库都为ucenter自带的数据库,默认通信密钥为123456,配置下即可运行,注意ucenter版本...

    UCenter v1.6 简体UTF-8 build 20110505

    UCenter是今后Comsenz旗下各个产品之间信息直接传递的一个桥梁,通过UCenter站长可以无缝整合Comsenz系列产品,实现用户的一站式登录以及社区其他数据的交互。UCenter拥有机制完善的接口,经过简单修改便可以挂接...

Global site tag (gtag.js) - Google Analytics