ホームページ  >  記事  >  CMS チュートリアル  >  phpcms phpsso が同期的に終了できない場合はどうすればよいですか?

phpcms phpsso が同期的に終了できない場合はどうすればよいですか?

藏色散人
藏色散人オリジナル
2020-02-04 10:49:512238ブラウズ

phpcms phpsso が同期的に終了できない場合はどうすればよいですか?

phpcms が同期的に終了できない場合はどうすればよいですか? phpcmsv9 phpsso は同期的に終了できませんか?

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 の 2 番目のパラメーターは空の配列であることに注意してください

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 を返し、以下の同期終了コードは実行されません。上記の手順では、同期ログアウトを呼び出すときに渡されるデータ パラメーターが正確に array() であり、空の場合は当然 true が返されることがわかります。したがって、同期出口への呼び出しはここで終了します。

問題の解決策:

原因がわかれば解決は簡単ですが、大きく分けて 2 つのタイプがあります。

より安全な方法は、ps_member_synlogout の空の配列に要素を追加することです。

2 つ目は、empty($this->data) 判定を削除することです。

PHP 中国語 Web サイト、多数の無料 PHPCMS チュートリアル 、オンライン学習へようこそ!

以上がphpcms phpsso が同期的に終了できない場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。