《CMS技巧:phpcmsv9通過ucenter與ecshop整合 無法同步退出》要點:
本文介紹了CMS技巧:phpcmsv9通過ucenter與ecshop整合 無法同步退出,希望對您有用。如果有疑問,可以聯系我們。
相關主題:PHPCMS教程
導讀:phpcms v9 和ecshop整合成功后,退出無法同步的問題,出現這樣的一個錯誤.如圖:phpcmsv9自帶了一個phpsso_server用于多站點同步登錄,...
phpcms v9 和ecshop整合成功后,退出無法同步的問題,出現這樣的一個錯誤.如圖:

phpcmsv9自帶了一個phpsso_server用于多站點同步登錄,還可以整合ucenter.為了不改動太多的代碼,今天整合ECSHOP和
PHPCMS的時候還是用了這個phpsso.ECSHOP很方便,簡單配置了一下就可以和ucenter通信了.這個phpsso搞了半天沒有成功和ucenter通信.經過幾個小時的琢磨,最終還是成功讓他們通信了.注冊,登錄,都可以同步,唯獨在phpcms中退出登錄時ECSHOP沒有退出,反之確可以.
問題出現的原因:
首頁看到了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(empty($this->data) || !is_array($this->data)) {
??????? exit('0');
????? }
??? } else {
????? exit('0');
??? }
這里對$this->data有一個判斷,如果empty返回true就直接返回0不會再執行下面的同步退出代碼了.而上面一步可以看到調用同步登出時傳入的data參數恰恰就是array(),empty當然會返回true.于是調用同步退出就在這里終止.
問題的解決辦法:
知道了原因要想解決就很容易了,主要有兩種.
第一種方法:找到phpcms/modules/member/classes/client.class.php? 里的ps_member_synlogout 函數里面給那個空的數組隨便增加一個元素.
例如:
public function ps_member_synlogout() {
?? ??? ?return $this->_ps_send('synlogout', array('aa'=>true));
?? ?}
第二種就是找到phpsso_server/phpcms/modules/phpsso/classes/phpsso.class.php 大概是35行左右去掉empty($this->data)這個判斷.
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/5845.html