web-dev-qa-db-fra.com

Avertissement: session_destroy (): tentative de destruction d'une session non initialisée

mon fichier class.inc:

<?php
class logout{
    public function logout(){
        $_SESSION = array();
        if (ini_get("session.use_cookies")) {
            $params = session_get_cookie_params();
            setcookie(session_name(), '', time() - 42000, $params['path'], $params['domain'], $params['secure'], $params["httponly"]);
        }
        session_destroy();
    }   
}

?>

code utilisé pour ma déconnexion:

session_start();
require($path."include/class.inc");
if(!empty($_GET['logout'])){
    $object=new logout();
    $object->logout();
    $content='5;url='.$path.'index.php';
}

Lorsque la fonction logout est appelée, elle détruit la session, mais affiche l'avertissement suivant:

Warning: session_destroy(): Trying to destroy uninitialized session in class.inc on line 9

Je ne parviens pas à résoudre le problème car la session n'est détruite d'aucune autre manière avant la session_destroy() de class.inc.

11
RatDon

Vous devez appeler la fonction mentionnée ci-dessous en haut de votre fonction de déconnexion dans la classe de déconnexion.

session_start();

Ajoutez la fonction ci-dessus et essayez-la. Si vous ne démarrez pas la session en haut de votre fichier, des exceptions telles que "en-têtes déjà envoyés", "impossible de démarrer la session", etc., apparaîtront.

31
Jijo John

Cette erreur est courante lorsque vous n'avez pas encore démarré la session.

if (!isset($_SESSION))
  {
    session_start();
  }
12
James

J'ai rencontré le message d'erreur session_destroy() lorsque j'ai commencé à utiliser session_write_close(). Pour déterminer si session_destroy() doit être appelé ou non, je devais procéder comme suit:

class Session {
    public static function start() {
        self::$haveSession = true;
        session_start();
    }
    public static function finish() {
        session_write_close();
        self::$haveSession = false;
    }
    public static function clear() {
        if (self::$haveSession) {
            session_unset();
            session_destroy();
        }
    }
}

Dans PHP> = 5.4, le remplacement de if (self::$haveSession) par if(session_status() === PHP_SESSION_ACTIVE) devrait fonctionner.

2
Roger Dueck

Vous pouvez ajouter ce code pour démarrer une session si elle n'a pas démarré avant.

if(!session_id()) {
    session_start();
}
1
AboElnouR

Vous devrez appeler session_start () avant d'appeler session_destroy ();

Stockez-vous la session dans des données dans des fichiers ou dans une base de données. Si vous la stockez dans une base de données, normalement, je supprime simplement l'enregistrement de la table de session qui correspond à l'identifiant de session. Ainsi, vous n'avez pas à désenregistrer chaque session var et elle supprime toute la session. 

0
Alok Jha

Commencez votre session session_start(); et vous pouvez détruire votre session

    <?php
    session_start();
    class logout{
        public function logout(){
            $_SESSION = array();
            if (ini_get("session.use_cookies")) {
                $params = session_get_cookie_params();
                setcookie(session_name(), '', time() - 42000, $params['path'], $params['domain'], $params['secure'], $params["httponly"]);
            }
            session_destroy();
        }   
    }

?>
0
Nathan Srivi