`
xuebingnanmm
  • 浏览: 174423 次
  • 性别: 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端登录。就可以实现同步了。怎么让他不需要激活?直接可以登入呀 或者跳到激活页面
这个问题你解决了吗 万分感谢

相关推荐

    ShopEx 4.8.5 UCenter 1.5.2 配置

    团队开发的一款用户中心系统,主要用来管理多应用系统的用户账号信息,实现单点登录等功能。 #### 二、会员整合的重要性 随着互联网技术的发展,越来越多的企业开始重视用户体验和服务的一致性。对于拥有多个应用...

    discuz 、mtceo、tipask、phpcms、edusoho 站点整合配置说明文档

    《整合Discuz、MTCEO、Tipask、PHPCMS、EduSoho站点的单点登录配置详解》 单点登录(Single Sign-On,简称SSO)是一种方便用户在多个应用系统间自由切换并保持登录状态的技术。在本文中,我们将详细介绍如何实现...

    ShopEX不能同步登陆的解决方案

    目标是让用户在登录ShopEX之后,其登录状态能够自动同步到天天团购和其他关联应用中,实现单点登录的功能。 #### 问题表现 在实际操作中发现,当用户在ShopEX上登录后,尽管可以正常使用ShopEX的所有功能,但登录...

    discuz同步登陆程序

    UC是Discuz提供的一套统一认证中心解决方案,通过UC可以实现多站点间的单点登录(Single Sign-On, SSO)。UC的核心组件包括:UCenter Server、UCenter Client 和 UCenter Home。其中,UCenter Server负责用户管理,...

    Django实现单用户登录的方法示例

    ### Django 实现单用户登录的方法详解 #### 一、引言 在开发Web应用时,为了保障用户数据的安全性及提升用户体验,有时我们需要实现“单用户登录”功能,即一个账号仅能在一个设备上登录使用。例如,许多企业级应用...

    使用说明1

    - 单点登录(Single Sign-On,简称SSO)是一种用户认证机制,用户只需在一个应用中登录一次就可以访问所有相互信任的应用系统。 - **设置步骤**: - 进入OpenSNS后台,找到“设置”菜单下的“PC端设置”,然后...

    Discuz! X3.1与通达OA2013增强版集成方法

    自带的UCenter系统实现用户信息的同步与单点登录功能。 首先,我们需要了解什么是Discuz! X3.1。Discuz! X3.1是一个由康盛创想(北京)科技有限公司开发的高效、安全、可扩展的社区论坛软件。它内置了UCenter,这是一...

    discuz二次开发登录验证原理

    中,还可以实现多个站点之间的认证共享,即所谓的“单点登录”(Single Sign-On, SSO)。通过配置Ucenter(一个由Comsenz提供的统一认证中心),可以实现用户在一个站点登录后,在其他关联站点也能自动登录的效果。...

    CMS网站管理系统,phpcms

    Ucenter是PHPCMS中的用户中心,它允许用户在多个应用间共享账号和信息,实现单点登录。这对于拥有多个子站点或者社区功能的大型网站来说尤其重要,能够提升用户体验,增强用户粘性。例如,bbs模块可能是论坛部分,...

    phpcms 的sso通信失败的解决和思路

    标题中的"phpcms 的sso通信失败的解决和思路"涉及到的是PHP CMS系统phpcms在实现单点登录(Single Sign-On, SSO)时遇到的问题及其解决方案。SSO是一种允许用户在一次登录后就能访问多个应用程序的技术,它提高了...

Global site tag (gtag.js) - Google Analytics