Partage
  • Partager sur Facebook
  • Partager sur Twitter

Détruire une session

'session_destroy(): Trying to destroy uninitialized session'

Sujet résolu
    25 novembre 2021 à 20:54:49

    Bonsoir, dans mon initiation à PHP je suis actuellement sur le chapitre à propos des sessions et j'ai voulu créer un système de session qui enregistre un produit sélectionné dans une liste via un formulaire ainsi qu'un bouton de déconnexion mais cela ne doit se faire que si l'utilisateur est connecté. Pour cela j'ai une fonction qui autorise l'authentification si l'utilisateur existe et si le mot de passe est le bon et qui exécute cette ligne en cas de succès d'authentification :

    $_SESSION['is_logged']=true;


    Pour conditionner l'accès aux produits ainsi que l'affichage du bouton de déconnexion j'ai ajouté ceci dans le fichier d'en-tête :

    <?php if(isset($_SESSION['is_logged'])) : ?>
      <?php if($_SESSION['is_logged']) : ?>
    	<li class="nav-item">
    	  <a class="nav-link" href="products.php">Produits</a>
    	</li>
    
    	<li class="nav-item">
    	  <a class="nav-link" href="logout.php">Se déconnecter</a>
    	</li>
    
      <?php endif ?>
    <?php endif ?>


    Enfin, le bouton de déconnexion redirige vers une page de déconnexion dont voici le code :

    session_destroy();

    Lorsque je clique sur ce bouton cela affiche un message d'erreur : "session_destroy(): Trying to destroy uninitialized session", je précise que j'ai bien initialisé la session en appelant session_start() avant le code HTML de la page d'accueil. Si je remplace session_destroy() par $_SESSION = array() ça n'a visiblement aucun effet de destruction sur la session.

    D'où peut bien provenir cette erreur ?

    Merci par avance

    • Partager sur Facebook
    • Partager sur Twitter
      25 novembre 2021 à 21:18:18

      Mais il y a un session_start avant le sesion_destroy ? (on n'a pas le code complet et le message d'erreur tant à dire le contraire donc ...)

      Le if($_SESSION['is_logged']) ne devrait pas être nécessaire dans la mesure où elle ne devrait jamais valoir false, if(isset($_SESSION['is_logged'])) devrait suffire à lui seul. Par ailleurs, histoire de savoir qui est connecté, on garde plutôt l'id de l'utilisateur en session qu'un flag connecté ou non (qui, une fois de plus, ne peut que l'être sinon la variable ne devrait pas exister)

      -
      Edité par julp 25 novembre 2021 à 21:21:50

      • Partager sur Facebook
      • Partager sur Twitter
        25 novembre 2021 à 22:25:01

        J'ai résolu le problème finalement en appelant effectivement session_start() avant session_destroy().

        Je suis du même avis pour $_SESSION['is_logged'], j'ai modifié la page d'accueil pour qu'elle affiche l'article en cas d'utilisateur connecté et il suffit en effet de tester l'existence de la variable. Je prends note de l'utilisation de l'id plutôt. Merci pour ton aide.

        • Partager sur Facebook
        • Partager sur Twitter

        Détruire une session

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown