分析ucenter和ecshop整合原理

2010-12-08 10:39 来源:www.chinab4c.com 作者:admin

   昨天在做ecshop,ucenter,discuz三者的整合.遇到的问题是从论坛可以同步登陆商城,而从商城不能同步登陆到论坛.
  
  通过和晓天的沟通交流,我们发现uc的整合登陆非常之复杂.首先,ecshop不能同步登陆论坛,很可能是因为缓存造成的。我们清楚缓存之后,发现了shop_config表中的integrate_code字段值还是为

ecshop.整合了ucenter应该是integrate_code的值为ucenter;这个时候,更新缓存也没用。必须手动强制修改.

  ucenter支持ecshop同步登陆的接口在includes\modules\integrates目录的ucenter里面,他的login()方法里面有个 $this->ucdata = uc_call("uc_user_synlogin", array($uid));,这里的ucdata

数据是非常重要的,是提供和ucenter整合所有的应用的集合.通过uc_client里面的uc_user_synlogin方式返回,他最终是调用user.php控制层的**ynlogin() 处理,返回一个<script

type="text/javascript" src="'.$app['url'].'/api/uc.php?time='.$this->time.'&code='.urlencode($this->authcode('action=synlogin&username='.$this->user['username'].'&uid='.$this-

>user['uid'].'&password='.$this->user['password']."&time=".$this->time, 'ENCODE', $app['authkey'])).'"></script>

  格式的数组.这个东西非常重要,也是实现同步登陆关键的js格式接口。

说到这里,我们应该很清楚。如果你是通过post直接from登陆的话。你可以查看原代码。可以看到该数据.如果整合了3个应用。那么最少有三条js格式的src接口文件地址.我的情况是在ecshop下登

陆,同步不到论坛登陆。查看代码,发现指向bbs的哪个src路径为空。

这个时候进行了ucenter的细调,发现在ucenter缓存下的东西data/cache/apps.php里面的应用少了,这个时候更新ucenter的缓存.发现恢复正常.

但是在ajax下,然后进行跳转的方式登陆.也很难同步.原因很简单.ajax登陆.他返回
  $ucdata = empty($user->ucdata)? "" : $user->ucdata;
        $result['ucdata'] = $ucdata;
  然后通过json.发送到js.所以发送到js的evalscript(res.ucdata);方式。其实就是执行同步登陆的过程,这里要注意。如果登陆停留时间太短,而且来不及执行该js.论坛也不能实现同步登陆。这个

时候,我们必须将跳转的时间设置长一些.

    通常的post的form表单登陆方式,我们也可以观察下,show_message($_LANG['login_success'] . $ucdata , array($_LANG['back_up_page'], $_LANG['profile_lnk']), array($back_act,'user.php'), 'info');这里面的$ucdata就是执行那js的。呵呵。如果少了这个。肯定是不能同步登陆

     uc的调试也十分复杂,在这里也感谢晓天的支持和帮助,才能排除解决问题.

   来源:http://www.chinab4c.com