Chinaunix首页 | 论坛 | 博客
  • 博客访问: 188966
  • 博文数量: 148
  • 博客积分: 2615
  • 博客等级: 少校
  • 技术积分: 1645
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-23 13:43
文章分类

全部博文(148)

文章存档

2010年(1)

2009年(111)

2008年(36)

我的朋友
最近访客

分类:

2009-01-20 19:37:43

主要是两个文件。一个是uc.php。另一个是客户端的clicen.php 下面是客户端到uc.php文件的通讯。。。。其实没讲到重点。还有一个socket在里面。这个东西是我应聘的时候叫我分析的。。。只能分析到这个水平了 下面是分析过程: UC_API常量定义。。说明这个文件只会被UC捕获和调用打开。 换句话说。UCenter会将查找像DZ论坛这样的应用文件里面是否有这个文件。并打开。调用里面的方法。 主要有两个方法执行单点登陆: uc_api_mysql()和uc_api_post() 通过参数,$model:模块名->这个参数指向的是uc内部的mc分成的m $action:执行的动作名-》这个参数指向的是uc内部的mc分层的c 执行的参数是一个数组。这个数组传递到控制器之中。 在UC_CONNECT=uc_api_post()的模式下是直接打开通过一系列处理(很复杂。指针啊什么的。没看明白,直接跳过去)传递 像”m=$module&a=$action&inajax=2&input=$input& appid=”.UC_APPID.$extra;形式的参数直接给服务端下的index.php文件解析。剩下的工作和下面完全相似。也是通过调用 onsnlogin()方法向另一个应用程序的uc.phh文件发出请求。虽然我看的程序很少,但我想这个是照顾没有数据库的应用与有数据库的应用也能相 互通信。 而在uc_api_mysql()是这样操作执行这个过程的: 以用户登陆为例 1、先建立一个usercontrol的对象引用-》再通过基类的load方法创建一个usermoder的对象引用到$_ENV['user']之 中=》usermoder开始链接uc的数据库,所有共享的用户信息是存 储在这里的,定义各种方法获得数据库中的内容只要control通过$_ENV['user']超级全局数组调用usermodel的方法。就返回这个属 性值内容。 2、然后调用onsynlogin()方法。经过一系列的判断后(为了保证双方是能够通信,双方的应用已经注册到uc应用列表里。具体怎么实现的没仔细 看。)发送一个js方式的链接地址 出去。链接中的code就是前面分析的uc.php所截获的cocode参数。。uc.php分解然后执行相应的数据库或者缓存等等操作。 我的理解是这样的。 应用一和应用二目录下有一个api/uc.php文件。这个文件负责处理接口。 当一在登陆的时候,调用uc_user_synlogin($uid)接口。uc_user_synlogin函数通过调用 uc_api_mysql(”user”,”synlogin”)函数开始:进行控制-》创建控制器usercontrol,控 制器告诉模块usermodel需要开始链接数据库,准备好各种调用数据库中数据的方法。直接只需要调用$_ENV['user']-》对应方法就能够调 用到对应属性值。做完这些工作后,再防 注入处理等操作后,就调用控制器的onsynlogin()方法发送一个url请求给应用二的uc.php文件。uc.php文件分解发送过来的请求,得 到动作接口为synlogin。并且获得uid的值。 以这个值为对应的用户建立在应用二下的cookie等方法创建一个标示这个用户已经登陆。整个通信结束。 通过文件分析。ucenter还有一个机制,如果客户端里面的类没有完成相应的功能,则从服务端里面的类里面抽取对应欠缺的方法。。。因为 onsynlogin是在服务端找到的。。这此 只是简单的看了一下逻辑。。。。。没有找到这个机制怎么实现的。我想核心是调用user对应的_call魔法方法。。。不知道我所猜测的是否正确。望指 正!
阅读(420) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~