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 ?

藏色散人
Libérer: 2020-02-04 10:49:51
original
2266 Les gens l'ont consulté

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();
Copier après la connexion

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());  
}
Copier après la connexion

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');  
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal