phpcms用戶退出卻沒法通知到ucenter的 BUG

用戶模塊  /modules/member/index.php        function logout()javascript

首先PHPCMS的登出的代碼裏面有一句同步登出的語句:php

$synlogoutstr = $this->client->ps_member_synlogout();

這個同步登出的代碼是這樣的:  modules/member/classes/client.class.php 大概第67行java

    /**
     * 同步退出
     * @param string $uid
     * @return string javascript用戶同步退出js
     */
    public function ps_member_synlogout() {
        return $this->_ps_send('synlogout', array());
    }

注意這裏_ps_send的第二個參數是一個空的數組數組

 

再看到phpsso_server中phpsso類的構造函數:   phpsso_server/phpcms/modules/phpsso/classes/phpsso.class.php  大概第32行app

if(isset($_POST["data'])) {  
    parse_str(sys_auth($_POST['data'], 'DECODE', $this->applist[$this->appid]['authkey']), $this->data);  
              
    if(emptyempty($this->data) || !is_array($this->data)) {  
        exit('0');  
    }  
} else {  
    exit('0');  
}  

這裏對$this->data有一個判斷,若是empty返回true就直接返回0不會再執行下面的同步退出代碼了。而上面一步能夠看到調用同步登出時傳入的data參數偏偏就是array(),empty固然會返回true。因而調用同步退出就在這裏終止。函數

問題的解決辦法: ui

知道了緣由要想解決就很容易了,主要有兩種。保險一點的方法是到ps_member_synlogout裏面給那個空的數組隨便增長一個元素。第二種就是去掉empty($this->data)這個判斷。this

相關文章
相關標籤/搜索