data)"."/> data)".">

Maison >Tutoriel CMS >PHPCMS >Que dois-je faire si phpcms phpsso ne peut pas se fermer de manière synchrone ?

Que dois-je faire si phpcms phpsso ne peut pas se fermer de manière synchrone ?

藏色散人
藏色散人original
2020-02-04 10:49:512264parcourir

Que dois-je faire si phpcms phpsso ne peut pas se fermer de manière synchrone ?

Que dois-je faire si les phpcms ne peuvent pas se fermer de manière synchrone ? phpcmsv9 phpsso ne peut pas se fermer de manière synchrone ?

phpcmsv9 est livré avec un phpsso_server pour une connexion synchrone multi-sites, et peut également intégrer ucenter. Afin de ne pas trop changer de code, j'ai encore utilisé ce phpsso lors de l'intégration d'ECSHOP et PHPCMS aujourd'hui.

ECSHOP est très pratique. Après une configuration simple, vous pouvez communiquer avec ucenter. Ce phpsso fonctionne depuis longtemps sans succès pour communiquer avec ucenter. Après plusieurs heures de réflexion, j'ai finalement réussi à les faire communiquer.

L'inscription et la connexion peuvent toutes être synchronisées, sauf qu'ECSHOP ne se ferme pas lors de la déconnexion dans phpcms, et vice versa.

Cause du problème :

Sur la page d'accueil, j'ai vu une déclaration de déconnexion synchrone dans le code de déconnexion PHPCMS :

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

Cette synchronisation Le le code de déconnexion est comme ceci

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

Notez que le deuxième paramètre de _ps_send est un tableau vide

Regardez le constructeur de la classe phpsso dans phpsso_server :

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');  
}

Il y a un jugement sur $this->data ici. Si vide renvoie vrai, il renverra directement 0 et le code de sortie synchrone suivant ne sera pas exécuté. Dans l'étape ci-dessus, vous pouvez voir que le paramètre data transmis lors de l'appel de la déconnexion synchrone est exactement array(), et vide renverra bien sûr true. L'appel à la sortie synchrone se termine donc ici.

Solutions au problème :

Il est facile de résoudre le problème une fois que vous connaissez la cause. Il existe deux types principaux.

Un moyen plus sûr consiste à ajouter un élément au tableau vide dans ps_member_synlogout.

La deuxième méthode consiste à supprimer le empty($this->data) jugement.

Site Web PHP chinois, un grand nombre de Tutoriels PHPCMS gratuits, bienvenue pour apprendre en ligne !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn