一直在用康盛的产品,自然少不了单点登陆,最近重新研究了下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_client的controller下的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_requestdata和uc_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, 并且传输已经登陆的公用UID,ucnter循环通过JS调用各应用下的api,在各个地方设置cookie,而保证cookie通用的则是P3P处理[注意不同应用下的api脚本不一样,bbs的uc.php不同于uchome的uc.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存储的数据格式
分享到:
相关推荐
UCenter+MediaWiki+Discuz X2实现单点登录
首先我们先来了解下Ucenter登录步骤 1、用户登录discuz,通过logging.php文件中的函数uc_user_login对post过来的数据进行验证,也就是对username和password进行验证。 2、如果验证成功,将调用位于uc_client下client...
PHP整合dedecms+ucenter+discuz三家,实现用户单点登录功能(同步登录与退出).zip
单点登录, SSM框架公共模块 ├── zheng-admin -- 后台管理模板 ├── zheng-ui -- 前台thymeleaf模板[端口:1000] ├── zheng-config -- 配置中心[端口:1001] ├── zheng-upms -- 用户权限管理系统 | ├── ...
Discuz3.2与Java 项目整合单点登陆,discuz 和 JAVA 对接需要一个中间件,它就是 Ucenter。Comsenz(康盛)的 UCenter 当前在国内的单点登录领域占据绝对份额,其完整的产品线令 UCenter 成为了账号集成方面事实上的...
ecshop整合ucenter配置文件
本文主要介绍了利用webservice,session,cookie技术,来进行通用的单点登录系统的分析与设计。具体实现语言为PHP。单点 登录,英文名为Single Sign On,简称为 SSO,是目前企业,网络业务的用户综合处理的重要组成...
ucenter同步原理 和一些函数的说明以及注释
Thinkphp整合ucenter同步登录注册退出
discuz-ucenter-api-for-java discuz 单点登录 ucenter http://knight-black-bob.iteye.com/blog/2378199
java整合Ucenter统一登陆、退出源码,头像、消息、统一认证管理
[使用技巧] ecshop discuz ucenter整合 1.安装ucenter 2.安装discuz.安装过程中与ucenter集成,不需要我做任何事情 3.安装ecshop 将uc_client拷贝到根目录下....现在我的discuz和ecshop可以同步登陆了。
UCenter+MediaWiki+Discuz X2实现单点登录,发布一般防止丢失以免后续需要找不到了
提供MySQL和 HTTP 两种连接用户中心的模式,使之能将 UCenter 和各应用能灵活部署,可以是单台服务器,也可以是局域网、广域网。 通知失败重发机制,为用户中心与各应用交换数据提供更好的保障。 缓存、模板、日志等...
UCenter 是今后 Comsenz 旗下各个产品之间信息直接传递的一个桥梁,通过 UCenter 站长可以无缝整合 Comsenz 系列产品,甚至其它更多的第三方应用程序,实现用户的一站式登录,个人信息、积分等的统一管理。...
ucenter discuz Java api
如果你的站點之前沒有安裝 UCenter,請先下載並進行安裝。 UCenter 最新版本下載地址: http://download.comsenz.com/UCenter/ 接下來,開始安裝UCenter Home程序。 1. 通過ftp工具,將 ./upload 目錄中的所有文件...
附近包含有thinkphp的简单测试程序和一般程序,主要功能为两个程序是通过ucenter通信,使这两个程序可实现同步登录和注销,数据库都为ucenter自带的数据库,默认通信密钥为123456,配置下即可运行,注意ucenter版本...
UCenter是今后Comsenz旗下各个产品之间信息直接传递的一个桥梁,通过UCenter站长可以无缝整合Comsenz系列产品,实现用户的一站式登录以及社区其他数据的交互。UCenter拥有机制完善的接口,经过简单修改便可以挂接...