UCenter应用同步登录分析

在uc中如果安装了多个应用,那么同步登录问题是站长很关心的问题。下面我们来分析同步登录的过程:  假设 uc中有 1一个discuz!x2论坛 和一个其它程序,通信都成功的状态下, 怎么去排查同步登录的问题呢

首先,在discuz!登录的时候,程序会调用class_member.php类。
入口方式:member.php?mod=logging&action=login ,通过这个地址程序将进入function on_login()方法部分 然后查找$this->setting['allowsynlogin']  这是程序后台设置是否开启同步登录 这个方法中有两种情况判断登录问题 根据$_G['uid']
  
  
  1. if($_G['uid']) {
  2. $referer = dreferer();
  3. $ucsynlogin = $this->setting['allowsynlogin'] ? uc_user_synlogin($_G['uid']) : '';
  4. $param = array('username' => $_G['member']['username'], 'usergroup' => $_G['group']['grouptitle'], 'uid' => $_G['member']['uid']);
  5. showmessage('login_succeed', $referer ? $referer : './', $param, array('showdialog' => 1, 'locationtime' => true, 'extrajs' => $ucsynlogin));
  6. }

同步退出过程类似同步登录(这里不做说明)


从这里不难发现, uc_user_synlogin($_G['uid']) 处理的关键。打开: uc_client.php文件,

  
  
  1. function uc_user_synlogin($uid) {
  2. $uid = intval($uid);
  3. if(@include UC_ROOT.'./data/cache/apps.php') {
  4. if(count($_CACHE['apps']) > 1) {
  5. $return = uc_api_post('user', 'synlogin', array('uid'=>$uid));
  6. } else {
  7. $return = '';
  8. }
  9. }
  10. return $return;
  11. }
此函数的作用就是与uc通信得到每个接口程序的要进行同步登录的处理字符串。是以js形式   类似这样一段代码: 这代码是从uc中返回。用来去访问接口

 
 
  1. <script type="text/javascript" src="http://localhost/x2817/api/uc.php?time=1317295440&code=be61At%2Be2gox280pg05HW%2FPd7vhIS3CX%2BPMBfh9f0X118Ezkvf6oeXEN8DAyK8fdptfz0WXONYikf2R61KW88tHd1YOzkqxaAew8YC5%2FVGcLPj4uX0KMpGUgUTqmZvAhk%2FrKqOQJylxdbvKy9suRNYznoRAeCeCAP%2BH3" reload="1"></script>
  2. <script type="text/javascript" src="http://localhost/x151/api/uc.php?time=1317295440&code=b339OUklPx183hGdbeWCn9x%2FVXWj6CvzDh6C0R4WHqH3psEPXh82MgPZ6CewNnczDnuI51ccYdzX1AXQcQMoI%2F3yldiApHpGiFRd336yI%2FXda0bsn1vjzhqxWj8E0HodoC6%2BBU1TytX2q7nxeFNWT2MUzycZLjYN8h2W" reload="1"></script>


得到这段代码之后,网站开发是怎么去运用的呢?又是在什么时候执行呢? 下面我们查看:(由于情况比较多,拿特殊情况来分析)


  
  
  1. showmessage('login_succeed', $referer ? $referer : './', $param, array('showdialog' => 1, 'locationtime' => true, 'extrajs' => $ucsynlogin));
当用户登录成功,请在跳转的过程中,将会执行这段代码 这里的js关键是code部分,下面我们进入 接口部门假设应用的接口为: uc.php

   
   
  1.     $code = @$_GET['code'];
  2.     parse_str(authcode($code, 'DECODE', UC_KEY), $get);
  3. if(time() - $get['time'] > 3600) {
  4.     exit('Authracation has expiried');
  5. }

将code解密,如果解密错误(请检查uc的密钥是否正确)。可以将得到的$get输出。调试方法:由于程序是用js在加载php文件所以直接断开输出是不会看到结果。电脑上门维修可以将得到的结果输入到文件查看:

  
  
  1. $get = var_export($get,true);
  2. file_put_contents('test.txt',$get);
这样我们就能清楚的查看到code部分到底传入了什么, 查看代码:

  
  
  1. if(in_array($get['action'], array('test', 'deleteuser', 'renameuser', 'gettag', 'synlogin', 'synlogout', 'updatepw', 'updatebadwords', 'updatehosts', 'updateapps', 'updateclient', 'updatecredit', 'getcredit', 'getcreditsettings', 'updatecreditsettings', 'addfeed'))) {
  2. $uc_note = new uc_note();
  3. echo $uc_note->$get['action']($get, $post);
  4. exit();
  5. }

就不难发现,程序是怎么执行登录。

如果应用程序没有正常登录:
首先判断,在class_member.php中  $ucsynlogin  是否返回了对应的js,如果返回了

接下来,查看是否进入到接口且正确解析code。然后查看是否执行了登录操作


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EduSoho网络课堂EduSoho 是协助机构和个人建立在线教育网站的开源建站系统,提供在线教学、网校管理、云视频点播等功能。EduSoho由杭州阔知网络科技有限公司开发,于2013年10月8日开放RC版本下载。 EduSoho功能简介 1. 课程发布系统 支持三种课时类型:视频、图文、音频 除自主发布视频,也可以引用站外视频 课程目标和适合人群,协助学员定位 资料上传、测验题库维护,增强教学效果 可视化课时管理,可以对逐个课时进行发布,支持连载课程 2. 在线学习系统 课程展示页面和学习页面分离,让处于不同体验时期的学员获得该时期的必要信息 支持支付宝购买课程 笔记、资料,学员可随时记录知识要点,查看、下载课时资料 问答、讨论区,师生之间、学员之间可有效沟通 在线测验,学生学习后可进行测验了解掌握状况。 支持大部分移动客户端 3. 系统功能 支持三种管理权限:教师、管理员、超级管理员。用于三种不同分工 后台首页仪表盘,全面快速了解网校的运营、收入情况 简洁的内容管理,通过页面、导航、编辑区有效的组织网站 各种模版选择和定制,让网站独具特色! 云服务支持,通过简单设置实现云服务升级 服务器端运行环境推荐   操作系统:Linux  推荐使用Ubuntu,Fedora,CentOS,Gentoo Web服务器:推荐Nginx或Apache2 MYSQL数据库:推荐5.0以上版本 PHP版本:推荐5.3.17以上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值