UCenter的应用整合与单点登录分析

call_user_func函数
服务器君一共花费了206.379 ms进行了5次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

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

用户登陆

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,供单点登陆用即可。 

单点登陆

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.nowamagic.net 和 b.nowamagic.net 另外有个公用的uceter.nowamagic.net,uceter.nowamagic.net通过JS跨域调用a.nowamagic.net b.nowamagic.net,这两个脚本都做了设置cookie 的功能,但为了跨域,考虑到不同浏览器[主要考虑IE6],必须调用P3P,实现成功跨域。

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

整合自己的应用

  1. 下载UCENTER,并且打好UCENTER的数据表,uc_members表的作用是存储通用的ID数据。
  2. 在自己的应用下增加uc_client 和 api,这两个目录下的文件需要根据实际情况进行更改。
  3. 进入ucenter的后台,添加单点登陆的应用。
  4. 添加单点登陆成功后会出现一些配置信息,在自己的应用下添加config.php, 并且复制配置信息,增加一句 $database = 'mysql';

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

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

应用整合其他办法

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

本文地址:http://www.nowamagic.net/librarys/veda/detail/1506,欢迎访问原出处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/1506

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

大家都在看

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《UNIX环境高级编程(第2版)》 史蒂文斯 (作者), 拉戈 (作者), 尤晋元 (译者), 张亚英 (译者), 戚正伟 (译者)

《UNIX环境高级编程(第2版)》是被誉为UNIX编程“圣经”的Advanced Programming in the UNIX Environment一书的更新版。在本书第1版出版后的十几年中,UNIX行业已经有了巨大的变化,特别是影响UNIX编程接口的有关标准变化很大。本书在保持了前一版的风格的基础上,根据最新的标准对内容进行了修订和增补,反映了最新的技术发展。书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在此基础上介绍了多个应用示例,包括如何创建数据库函数库以及如何与网络打印机通信等。

更多计算机宝库...