phpcms phpsso不能同步退出怎么辦

phpcms phpsso不能同步退出怎么辦

phpcms不能同步退出怎么辦?phpcmsv9 phpsso無法同步退出 ?

?

phpcmsv9自帶了一個phpsso_server用于多站點同步登錄,還可以整合ucenter。為了不改動太多的代碼,今天整合ECSHOP和PHPCMS的時候還是用了這個phpsso。

ECSHOP很方便,簡單配置了一下就可以和ucenter通信了。這個phpsso搞了半天沒有成功和ucenter通信。經過幾個小時的琢磨,最終還是成功讓他們通信了。

注冊,登錄,都可以同步,唯獨在phpcms中退出登錄時ECSHOP沒有退出,反之確可以。

立即學習PHP免費學習筆記(深入)”;

問題出現的原因:?

?首頁看到了PHPCMS的登出的代碼里面有一句同步登出的語句:

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

?這個同步登出的代碼是這樣的

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

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

再看到phpsso_server中phpsso類的構造函數:

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。于是調用同步退出就在這里終止。

問題的解決辦法:?

知道了原因要想解決就很容易了,主要有兩種。

保險一點的方法是到ps_member_synlogout里面給那個空的數組隨便增加一個元素。

第二種就是去掉empty($this->data)這個判斷。

PHP中文網,大量的免費PHPCMS教程,歡迎在線學習!

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享