Ucenter 通信原理
1、用户登录bbs,通过logging.php文件,使得函数uc_user_login验证,如果验证成功,将调用函数uc_user_synlogin(位于uc_client/client.php文件中),在这个函数中调用uc_api_post(‘user’,synlogin,array(‘uid’=>$uid)); 调用完成之后向UC_API.’/index.php’传递了数据。这里的UC_API就是在config.inc.php中的定义的uc_server的URL地址。
2、uc_server的index.php接受参数数据,获得mode为user,action为synlogin,就调用control目录下的user.php类中的onsynlogin方法,通过foreach循环,以javascript的方式通知uc应用列表中的应用同步登录;即通过get方式传递参数给应用目录中的api下的uc.php一些数据。
3、uc.php接受通知并处理get传过来的数据,并在函数synlogin(位于uc.php中)通过函数_authcode加密数据(默认以UC_KEY作为密钥),用函数_setcookie设置cookie;
4、各个应用在适当的文件中用对应的密钥解码上面设置的cookie,得到用户id等数据;通过这个值来判断用户是否经过其他应用登陆过。
举例 (以discuz为例)
一、用户登录检查与用户登录验证logging.php
在bbs的loginging.php中如下代码段
Else if($action == ‘login’)
{
If($discuz_uid)
{
$ucsynlogin = ‘’;
Showmeage(‘login_succeed’,$indexname);
}
}
检查用户id变量$discuz_uid是否为空来判断,用户是否登录(包括从别的应用登录) 如果用户从bbs登录,则在登录验证成功后通过如下代码:
$ucsynlogin = $allowsynlogin ? uc_user_synlogin() : ’’;
通知其他应用------“用户已从bbs登录,请通知其他应用设置cookie”
(uc_server通过javascript调用的方式向其他应用的api/uc.php传递数据)