Paramètre dans url

bonjour,

je réalise un plugin d'authentification depuis la partie public. Tout est ok sauf la déconnexion, je créé un menu qui est composé de deux liens :
<li><a href="<?php echo plxMotor::urlRewrite('core/admin/profil.php') ?>">Mon profil</a></li>
	<li><a href="<?php echo plxMotor::urlRewrite($_SERVER['REQUEST_URI']).'&logout=true' ?>">Déconnexion</a></li>

C'est sur le second que j'ai un problème, pour lancer la fonction de déconnexion je passe un paramètre dans l'url logout=true. Sur la page ayant une url genre static/static-1 pas de problème mais sur la page d'accueil ça déconne, j'obtient un beau 404 avec une url qui ressemble à
http://monsite/&logout=true

Vous avez une idée ?

J'ai un string de l'array

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour

    Quel est le nom de la page sensée traiter la déconnexion ?

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • J'utilise le hook plxMotorConstruct et ensuite qui lance cette fonction :
    public function plxAuthLogout() {
    		if($_GET['logout']) {
    			$formtoken = $_SESSION['formtoken']; # sauvegarde du token du formulaire
    			$_SESSION = array();
    			session_destroy();
    			session_start();
    			$_SESSION['formtoken'] = $formtoken; # restauration du token du formulaire
    			unset($formtoken);
    		}
    	}
    

    J'ai un string de l'array

  • StéphaneStéphane Member, Former PluXml Project Manager
    donc si je comprends bien dès que tu as logout dans l'url, quelque soit la page sur laquelle tu es, tu veux te déconnecter.

    perso je ferais un truc du genre

    1- pour ton lien de déconnexion
    $plxShow->urlRewrite('index.php?logout')
    

    2- dans ton plugin, j'utiliserais le hook plxMotorPreChauffageBegin, avec comme code
    if($this->get AND preg_match('/^logout\/?/',$this->get)) {
      # code pour se déconnecter + redirection sur index.php 
    }
    

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • donc si je comprends bien dès que tu as logout dans l'url, quelque soit la page sur laquelle tu es, tu veux te déconnecter.
    Oui c'est l'idée, sans forcement retourner sur la page index.php

    Voila à quoi ça ressemble maintenant
    public function plxAuthLogout() {
    		if($this->get AND preg_match('/^logout\/?/',$this->get)) {
    			$formtoken = $_SESSION['formtoken']; # sauvegarde du token du formulaire
    			$_SESSION = array();
    			session_destroy();
    			session_start();
    			$_SESSION['formtoken'] = $formtoken; # restauration du token du formulaire
    			unset($formtoken);
    
    			header('Location: index.php');
    			exit;
    		}
    	}
    

    Maintenant quand je clic sur mon lien je me retrouve avec une erreur :
    Une erreur a été détectée :
    Page non trouvée
    Et je reste connecté puisque le tableau $_SESSION reste plein
    Array
    (
        [user] => 001
        [profil] => 0
        [hash] => kZ52mZexsw
        [domain] => 
    )
    

    J'ai un string de l'array

  • StéphaneStéphane Member, Former PluXml Project Manager
    tu passes bien dans la fonction plxAuthLogout et dans la boucle if ?

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • flipflipflipflip Member
    avril 2012 modifié
    Je passe bien dans la plxAuthLogout mais pas dans le if.

    J'ai comme l'impression qu'il aime pas le $this->get puisque quand je fais un echo $this->get il y a rien d'afficher.

    J'ai un string de l'array

  • J'ai trouvé c'est encore tout simplement l'accès à la fonction get qui est un "alias" de getGets dans plxUtils du coups j'ai transformer le code en
    public function plxAuthLogout() {
    		if(plxUtils::getGets() AND preg_match('/^logout\/?/', plxUtils::getGets())) {
    			$formtoken = $_SESSION['formtoken']; # sauvegarde du token du formulaire
    			$_SESSION = array();
    			session_destroy();
    			session_start();
    			$_SESSION['formtoken'] = $formtoken; # restauration du token du formulaire
    			unset($formtoken);
    
    			header('Location: index.php');
    			exit;
    		}
    	}
    

    Merci.

    J'ai un string de l'array

  • StéphaneStéphane Member, Former PluXml Project Manager
    Autant pour moi, j'avais fait un copier/coller à partir du code de plxMotor, d'où le $this

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

Connectez-vous ou Inscrivez-vous pour répondre.