PHP完全自学手册(珍藏版) 中文pdf扫描版下载
在做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的。呵呵。如果少了这个。肯定是不能同步登陆
转载请注明:谷谷点程序 » ecshop登录discuz无法同步登录,discuz登录ecshop可以同步登录之(ucenter和ecshop整合原理)