2 votes

Rediriger sur la déconnexion et afficher "Vous avez réussi à vous déconnecter !"

J'ai un service d'adhésion sur mon site web. Actuellement, lorsque quelqu'un se déconnecte, il est redirigé vers logout.php qui contient ce code :

<?php

        //check if the login session does no exist
        if(strcmp($_SESSION['uid'],”) == 0){
            //if it doesn't display an error message
            echo "<center>You need to be logged in to log out!</center>";
        }else{
            //if it does continue checking

            //update to set this users online field to the current time
            mysql_query("UPDATE `users` SET `online` = '".date('U')."' WHERE `id` = '".$_SESSION['uid']."'");

            //destroy all sessions canceling the login session
            session_destroy();

            //display success message
            echo "<center>You have successfully logged out!<br><a href = '/review-pratt/index.php' class='icon-button star'>Return Home</button></center>";
        }

        ?>

Au lieu que les utilisateurs soient dirigés vers "logout.php" et affichent une page ennuyeuse qui indique qu'ils se sont déconnectés. Je veux qu'ils soient redirigés vers index.php. Cette partie est facile, je sais.

Je souhaite qu'une barre de notification apparaisse en haut de l'écran pour les informer qu'ils ont réussi à se déconnecter. J'ai déjà essayé de faire cela auparavant et je n'ai jamais réussi à faire fonctionner quoi que ce soit. Toute aide ou suggestion serait appréciée !

Mise à jour

J'ai changé le code de logout.php en :

<?php

        //check if the login session does no exist
        if(strcmp($_SESSION['uid'],”) == 0){
            //if it doesn't display an error message
            echo "<center>You need to be logged in to log out!</center>";
        }else{
            //if it does continue checking

            //update to set this users online field to the current time
            mysql_query("UPDATE `users` SET `online` = '".date('U')."' WHERE `id` = '".$_SESSION['uid']."'");

            //destroy all sessions canceling the login session
            session_destroy();

            //Redirect with success message
            header('Location: /index.php?msg=' . urlencode("You have been successfully logged out!"));
        }

        ?>

et j'ai ajouté le code suivant à mon index.php :

    <?php

    if ($_GET['msg'])
{
       echo '<div class="success_message">' . base64_decode(urldecode($_GET['msg'])) . '</div>';
}

?>

Et quand je me déconnecte, je reçois cette erreur :

Warning: Cannot modify header information - headers already sent by (output started at /home/content/38/10473938/html/review-pratt/business_profiles/logout.php:19) in /home/content/38/10473938/html/review-pratt/business_profiles/logout.php on line 35

5voto

Andres Points 1046

Vous pourriez faire quelque chose comme ça :

header('location: index.php?status=loggedout');

et dans votre fichier index.php regardez si le statut n'est pas vide, et affichez un div avec le statut comme ceci :

<?php 
   if(!empty($_GET['status'])){
          echo '<div>You have been logged out!</div>';
   }
?>

Vous pouvez également effacer la session de l'utilisateur à l'intérieur de l'instruction if.

3voto

Luke Shaheen Points 2263

Il existe de nombreuses solutions à ce problème, mais presque toutes nécessitent que le fichier logout.php transmette le message et que le fichier index.php contienne le code permettant d'afficher le message.

Ma méthode préférée consiste à transmettre le message en tant que paramètre de l'URL. Utilisez header pour rediriger, utiliser code de base64 pour raccourcir le texte de l'url, et url_encode pour s'assurer que l'URL ne soit pas détruite.

//Redirect with success message
header('Location: /index.php?msg=' . urlencode(base64_encode("You have been successfully logged out!")));

Ensuite, sur votre page index.php

if ($_GET['msg'])
{
       echo '<div class="success_message">' . base64_decode(urldecode($_GET['msg'])) . '</div>';
}

Edita: Si vos en-têtes ont déjà été envoyés (avez-vous echo ), vous pouvez utiliser Javascript pour effectuer la redirection.

Remplacer header('Location: ') avec ça : echo '<meta http-equiv="Refresh" content="0;url=http://example.com/index.php?msg=' . urlencode(base64_encode('You have been successfully logged out!')) . '">';

1voto

Mortalus Points 4030

Vous pouvez utiliser le plugin "Noty" pour activer les notifications sur votre application web. voir ici : http://needim.github.com/noty/

La mise en œuvre devrait ressembler à quelque chose comme ça :

  1. Rediriger l'utilisateur vers index.php?logout=1
  2. Utilisez le paramètre Query String pour remplir un champ caché.
  3. Utilisez noty pour afficher la valeur du champ caché lors du chargement de la page.

Voici un exemple de code :

<?php 
   if(!empty($_GET['logout'])){
          echo '<input id="logoutMsg" value="You have been logged out!"  />';
   }
?>

<script>
   var logoutMsg = $('#logoutMsg').val();
   var noty = noty({text: logoutMsg });
</script>

0voto

surfine Points 61

Si vous voulez faire une redirection juste après le message de succès, alors utilisez le code suivant:-

    <?php

        //check if the login session does no exist
        if(strcmp($_SESSION['uid'],”) == 0){
            //if it doesn't display an error message
            echo "<center>You need to be logged in to log out!</center>";
        }else{
            //if it does continue checking

            //update to set this users online field to the current time
            mysql_query("UPDATE `users` SET `online` = '".date('U')."' WHERE `id` = '".$_SESSION['uid']."'");

            //destroy all sessions canceling the login session
            session_destroy();

            //display success message
            echo "<center>You have successfully logged out!
            echo '<meta http-equiv="Refresh" content="0;url=http://url.which.you.want.to.be.redirected.to">';
}
         }
?>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X