web-dev-qa-db-de.com

Warnung: session_destroy (): Versuch, eine nicht initialisierte Sitzung zu zerstören

meine class.inc-Datei:

<?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();
    }   
}

?>

verwendeter Code für meine Abmeldung:

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

Wenn die Funktion logout aufgerufen wird, wird die Sitzung zerstört, die Warnung wird jedoch angezeigt:

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

Ich kann keine Fehler beheben, da die Sitzung vor der session_destroy() von class.inc auf keine andere Weise zerstört wird.

11
RatDon

Die oben genannte Funktion müssen Sie Ihre Abmeldefunktion in der Abmeldeklasse aufrufen.

session_start();

Fügen Sie die obige Funktion hinzu und probieren Sie es aus. Wenn Sie die Sitzung nicht oben in Ihrer Datei starten, werden Ausnahmen wie "Bereits gesendete Header", "Sitzung kann nicht gestartet werden" usw. ausgelöst.

31
Jijo John

Dieser Fehler tritt häufig auf, wenn Sie die Sitzung noch nicht zuvor gestartet haben

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

Ich habe die session_destroy()-Fehlermeldung gefunden, als ich mit session_write_close() angefangen habe. Um herauszufinden, ob session_destroy() aufgerufen werden soll oder nicht, musste ich Folgendes tun:

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();
        }
    }
}

In PHP> = 5.4 sollte es funktionieren, if (self::$haveSession) durch if(session_status() === PHP_SESSION_ACTIVE) zu ersetzen.

2
Roger Dueck

Sie können diesen Code hinzufügen, um eine Sitzung zu starten, wenn sie nicht zuvor gestartet wurde

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

Sie müssen session_start () aufrufen, bevor Sie session_destroy () aufrufen.

Speichern Sie die Sitzung in Daten in Dateien oder in einer Datenbank. Wenn Sie es in einer Datenbank speichern, lösche ich normalerweise nur den Datensatz aus der Sitzungstabelle, die der Sitzungs-ID entspricht. Auf diese Weise müssen Sie nicht jede Sitzungsvariable abmelden und die gesamte Sitzung wird tatsächlich gelöscht. 

0
Alok Jha

Starten Sie Ihre Sitzung session_start(); und Sie können Ihre Sitzung zerstören

    <?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