Semblable à la question sur at Permet à la fonction wp_logout_url de fonctionner sur une page externe (non-Wordpress)
Le problème auquel je suis confronté est le fait que le sous-domaine est sur un serveur différent, donc je suis incapable d'inclure/d'exiger le fichier wp-blog-header.php
.
Existe-t-il un moyen de mettre en liste blanche des domaines pouvant autoriser des déconnexions instantanées, comme pour la liste blanche de redirection .
Sinon, comment puis-je autoriser les sous-domaines (il dispose d'un accès SQL distant) à créer un lien de déconnexion valide qui ignore l'avis "Êtes-vous sûr de vouloir vous déconnecter".
Cela ressemble-t-il à un travail logique pour s'assurer que la déconnexion est "valide" dans une certaine mesure:
http://website.com/custom_logout.php?confirm=sj239ks
, suivi de http://website.com/custom_logout.php?confirm=32k9la3
.Chaque fois qu'il modifie, il édite un fichier spécifique (custom_logout.php sur l'autre serveur OR un fichier txt/ini sur son propre serveur OR un autre serveur) et crée un tableau/une liste. de cordes
$confirmkeys = array("sj239ks", "32k9la3");
ou
[confirmkeys]
confirm[] = sj239ks
confirm[] = 32k9la3
Il n’aurait jamais que 2 clés de confirmation dans le fichier, une pour 24 heures (si la page est toujours ouverte) et une pour les 24 heures actuelles.
J'imagine que la même chose pourrait être faite individuellement plutôt que globalement, mais existe-t-il un besoin urgent pour cela?
Éditez custom_logout.php
pour ajouter une vérification pour voir si $_SERVER['HTTP_REFERER']
provient du même domaine (tous les sous-domaines). Si c'est le cas, définissez matching_referer
sur true. Si ce n'est pas le cas, définissez la variable sur false.
Éditez custom_logout.php
pour ajouter une vérification pour voir si la chaîne de requête correspond à une chaîne stockée dans un fichier spécifique. (plus facile à faire avec un fichier txt/ini sur le serveur secondaire?) S'il correspond, définissez matching_confirm
sur true. Si ce n'est pas le cas, définissez la variable sur false.
Éditez custom_logout.php
et faites-le aussi longtemps si une ou plusieurs vérifications sont vraies pour qu'elle se déconnecte proprement, si elles sont toutes les deux fausses déconnexion avec l'avertissement en les envoyant à la page /wp-login.php?action=logout
?
Vous pouvez créer un fichier nommé custom_logout.php et le placer dans le répertoire racine de wordpress. Cela contient
<?php
require_once("wp-load.php"); //load wordpress
wp_logout(); //logout
exit(); //end page
?>
Ensuite, dans votre site de sous-domaine, ouvrez l'URL avec une balise d'ancrage
<a href="http://youwebsite.com/custom_logout.php">Logout</a>
Vous ne pouvez pas créer facilement une liste blanche, car cela impliquerait de vérifier la provenance de l'utilisateur à l'aide de $ _SERVER ['HTTP_REFERER'], ce qui n'est pas fiable (généralement null). Malheureusement, il n’existe pas de solution simple.
Répondre à votre édition
Vous êtes tout à fait libre d'appliquer l'approche de clé temporaire s'il s'agit d'un compromis responsable. Cependant, au lieu de deux clés aléatoires, vous pouvez envoyer un hachage md5 du jour actuel. Utilisez un sel secret identique sur les deux serveurs. Maintenant, vous pouvez simplement recalculer le hachage d'hier et celui du jour actuel dans custom_logout.php et les comparer à la variable get entrante. Cela élimine le besoin d'un fichier txt/ini.
En supposant que vous soyez l'administrateur des deux sites ...
Ajoutez admin ajax handler dans votre site wp principal ...
add_action( 'wp_ajax_logout', 'my_logout_callback' );
function my_logout_callback() {
wp_logout(); // Log out
header('Location: http://www.example.com/successfully-logged-out');// Maybe redirect user somewhere?
wp_die();
}
Dans votre site de sous-domaine, cliquez sur le gestionnaire admin ajax du site principal ...
<a href='//example.com/wp-admin/admin-ajax.php?action=logout'>Logout</a>