结合示例分析ucenter通信原理

UCenter概念及应用

UCenter 的中文意思就是“用户中心”,是 Comsenz 从discuz6.10开始推出的连接旗下各个产品之间信息的一个桥梁,通过 UCenter 站长可以无缝整合 Comsenz 系列产品,实现用户的一站式注册、登录、退出以及社区其他数据的交互。

UCenter作为信息传统桥梁,拥有统一的短信息、好友机制,最终用户可以通过它轻松通行在各个应用之中,无需重复登录、注册、退出。统一的标签(TAG)机制,将社区中各个应用紧密连接,用户可以在社区里面进行自由穿梭,快速找到所需的应用,获得最佳的使用体验。

提供同步登录、退出、注册等相关接口,可以实现用户一个账号,在一处登录,全站通行。

提供短消息相关接口,可以实现用户在不同应用收发短消息。

提供 TAG 相关接口,可以实现通过关键词关联各应用的数据,如帖子、商品、视频,使数据多元化。

提供 Feed 相关接口,可以实现记录用户在各应用的行为,并且在 UCenter Home 等应用显示。

提供好友相关接口,可以实现各应用好友互通。

提供积分策略共享,可以实现各应用设置灵活的积分策略。

提供词语过滤数据共享,可以实现各应用共享 UCenter 的词语过滤数据。

提供 MySQL 和 HTTP 两种连接用户中心的模式,使之能将 UCenter 和各应用能灵活部署,可以是单台服务器,也可以是局域网、广域网。

通知失败重发机制,为用户中心与各应用交换数据提供更好的保障。

缓存、模板、日志等机制,保障系统在稳定,优化状态下运行。

(部分摘自百度百科:http://baike.baidu.com/view/1387651.htm)

Ucenter拥有一个Server端和一个Client端。Server端记录并存储了各个Client端的配置,以便在需要的时候向他们发出各种同步信息:短消息、同步登录、退出、删除用户等。ps:Server端由PHP语言编写,Client端可以为多种平台语言!

Ucenter提供的方法并不多,也只有几十个而已。这点可以通过看API就能了解 (我这里只是介绍Ucenter就不详细说明了)。在客户端通过可以调用这些方法来实现上面所说的各种效果。

整合了 ucenter就等于整合了整个php界的所有php程序。

一、功用

不对,何止整合了整个php界的所有php程序,而是整合了 ucenter就等于整合了所有的asp/asp.net/php/jsp等其它语言的所有web应用程序。(因为ucenter client的api开发包,dz会推出其它语言版)

而且所有整合的程序同步登录,同步退出,同步修改密码。最终用户可以通过它轻松通行在各个应用之中,无需重复登录、注册、退出

一个id可以出入一个站内的所有程序,如cms和bbs,也可以一个id出入www.aaa.com和www.bbb.com及www.ccc.com

aaa.com的用户可以和bbb.com的用户互发短消息pm,aaa.com的用户可以和bbb.com的用户加好友。

而且可以实现站内信(pm)和其它任意站的任意程序的站内信(pm)互通。

可以实现www.aaa.com与www.bbb.com及www.ccc.com共享一个用户库,www.aaa.com的用户可以给www.bbb.com的用户pm短信.

用户组与discuz不对应的问题也得到解决。因为一般应用程序的用户组是单独的一个应用,和discuz再没有关系,而是和ucenter有关系,而ucenter没有用户组的概念。

二、整合方法

如果单说整合用户的话,整合时应用程序的改动也非常小,原数据库不用动,原写cookies的代码不用动,原写数据库session的代码不用动,原来的程序不用怎么动,只需改动以下4个文件:

longin.php   register.php   logout.php   修改密码文件.php   (忘记密码.php不用动,用原来的就可以)

4个文件中加上和ucenter api通信的语句和逻辑结构。

另需要针对ucenter新增加一个文件uc.php,这个文件就是应用程序接收ucenter传来的指令并执行的文件。而且他利用p3p技术实现反向登录a.com或是同时反向登录a.com/b.com/c.com的dedecms或是phpcms或是任意所有程序。
共计改4个文件,增一个文件。
如果要是整合站内信pm,好友,头像等功能,思路与方法和整合用户类同。

另外有一点,在不同的系统之间注册的用户,在第一次登录这个从来没有登录过的系统时,会让激活。借用这个激活,可以让用户完善在本应用程序中的资料,如企业注册资料。资料不完善,不可以激活。

如在bbs注册一个用户test,第一次来到b2b的程序中,这时,并不会自动登录,而是要求用户激活,而test在bbs注册时填的字段与b2b中要求的不同。这时让用户完善资料。第二次来就会自动登录。

三、uc原理

以用户登录为例介绍,其它注销,改密码,消息,头像,好友均类同。

1.从用户xxx在某一应用程序的login.php,输入用户名,密码讲起。

先用uc_user_login函数到uc server验证此用户和密码,如正确,则写入session,写入cookies,并更新应用程序会员表中的登录ip,登录时间。用户感觉不到这个过程。

2.然后通过uc_user_synlogin通知uc server 用户xxx登录成功,这个过程可能使用ajax,用户感觉不到通知过程。

3.uc server收到这个消息后,马上命令手下,把xxx登录的消息,像令牌环一样,发给所有愿意接收(后台中那个是否开启同步登录)这个消息的其它应用程序。其实就是带参数访问一下各应用程序的uc.php,用户感觉不到这个过程。

4.各应用程序靠api下的uc.php来接收uc server发来的消息,并对uc server言听计从,让干什么就干什么。现在,收到让xxx用户在你的程序中登录的命令,马上执行。
并写本应用程序的session,并且使用p3p, 写入相同域或不同域的cookies.   用户感觉不到这个过程。

5.最后所有和uc整合的程序,xxx均登录成功。用户从www.test.com/bbs登录后, 跳到www.test.com/news同样显示登录。因为bbs 和news系统在后台均已登录。

6.应用程序与uc server的会话结束。
得益于uc设计的精巧过程,整个过程,用户完全感觉不到ucenter的存在.这是整合程序历史上的创新。

未完待续……