在uc中如果安装了多个应用,那么同步登录问题是站长很关心的问题。下面我们来分析同步登录的过程
假设 uc中有 1一个discuz!x2论坛 和一个其它程序,通信都成功的状态下。怎么去排查同步登录的问题呢
首先,在discuz!登录的时候,程序会调用class_member.php类。
入口方式:member.php?mod=logging&action=login ,通过这个地址程序将进入function on_login()方法部分
然后查找$this->setting['allowsynlogin'] 这是程序后台设置是否开启同步登录
这个方法中有两种情况判断登录问题 根据$_G['uid']
- if($_G['uid']) {
- $referer = dreferer();
- $ucsynlogin = $this->setting['allowsynlogin'] ? uc_user_synlogin($_G['uid']) : '';
- $param = array('username' => $_G['member']['username'], 'usergroup' => $_G['group']['grouptitle'], 'uid'
=> $_G['member']['uid']);- showmessage('login_succeed', $referer ? $referer : './', $param, array('showdialog' => 1, 'locationtime'
=> true, 'extrajs' => $ucsynlogin));- }
从这里不难发现,uc_user_synlogin($_G['uid']) 处理的关键。打开: uc_client.php文件,
- function uc_user_synlogin($uid) {
- $uid = intval($uid);
- if(@include UC_ROOT.'./data/cache/apps.php') {
- if(count($_CACHE['apps']) > 1) {
- $return = uc_api_post('user', 'synlogin', array('uid'=>$uid));
- } else {
- $return = '';
- }
- }
- return $return;
- }
此函数的作用就是与uc通信得到每个接口程序的要进行同步登录的处理字符串。是以js形式 类似这样一段代码:
这代码是从uc中返回。用来去访问接口
- <script type="text/javascript" src="http://localhost/x2817/api/uc.php?time=1317295440&code=be61At%2Be2gox
280pg05HW%2FPd7vhIS3CX%2BPMBfh9f0X118Ezkvf6oeXEN8DAyK8fdptfz0WXONYikf2R61KW88tHd1YOzkqxaAew8YC5%2FVGcLPj4
uX0KMpGUgUTqmZvAhk%2FrKqOQJylxdbvKy9suRNYznoRAeCeCAP%2BH3" reload="1"></script><script type="text/javascri
pt" src="http://localhost/x151/api/uc.php?time=1317295440&code=b339OUklPx183hGdbeWCn9x%2FVXWj6CvzDh6C0R4WH
qH3psEPXh82MgPZ6CewNnczDnuI51ccYdzX1AXQcQMoI%2F3yldiApHpGiFRd336yI%2FXda0bsn1vjzhqxWj8E0HodoC6%2BBU1TytX2q7
nxeFNWT2MUzycZLjYN8h2W" reload="1"></script>