518 Stimmen

Prüfen, ob die PHP-Sitzung bereits begonnen hat

Ich habe eine PHP-Datei, die manchmal von einer Seite aufgerufen wird, die eine Sitzung gestartet hat, und manchmal von einer Seite, auf der keine Sitzung gestartet ist. Wenn ich also session_start() bei diesem Skript erhalte ich manchmal die Fehlermeldung "Sitzung bereits gestartet". Dafür habe ich diese Zeilen eingefügt:

if(!isset($_COOKIE["PHPSESSID"]))
{
  session_start();
}

aber dieses Mal erhielt ich diese Warnmeldung:

Hinweis: Undefinierte Variable: _SESSION

Gibt es eine bessere Möglichkeit zu prüfen, ob die Sitzung bereits begonnen hat?

Wenn ich die @session_start Wird es dafür sorgen, dass die Dinge richtig funktionieren und die Warnungen einfach verstummen?

2voto

Antwort auf der Grundlage von @Meliza Ramos Antwort (siehe erste Antwort) und http://php.net/manual/en/function.phpversion.php ,

AKTIONEN:

  • PHP_VERSION_ID definieren, falls nicht vorhanden
  • definiere eine Funktion zur Überprüfung der Version anhand der PHP_VERSION_ID
  • Funktion zu openSession() sicher definieren

nur verwenden openSession()

    // PHP_VERSION_ID is available as of PHP 5.2.7, if our
    // version is lower than that, then emulate it
    if (!defined('PHP_VERSION_ID')) {
        $version = explode('.', PHP_VERSION);

        define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));

        // PHP_VERSION_ID is defined as a number, where the higher the number
        // is, the newer a PHP version is used. It's defined as used in the above
        // expression:
        //
        // $version_id = $major_version * 10000 + $minor_version * 100 + $release_version;
        //
        // Now with PHP_VERSION_ID we can check for features this PHP version
        // may have, this doesn't require to use version_compare() everytime
        // you check if the current PHP version may not support a feature.
        //
        // For example, we may here define the PHP_VERSION_* constants thats
        // not available in versions prior to 5.2.7

        if (PHP_VERSION_ID < 50207) {
            define('PHP_MAJOR_VERSION',   $version[0]);
            define('PHP_MINOR_VERSION',   $version[1]);
            define('PHP_RELEASE_VERSION', $version[2]);

            // and so on, ...
        }
    }

    function phpVersionAtLeast($strVersion = '0.0.0')
    {
        $version = explode('.', $strVersion);

        $questionVer = $version[0] * 10000 + $version[1] * 100 + $version[2];

        if(PHP_VERSION_ID >= $questionVer)
            return true;
        else
            return false;

    }

    function openSession()
    {
        if(phpVersionAtLeast('5.4.0'))
        {
            if(session_status()==PHP_SESSION_NONE)
                session_start();
        }
        else // under 5.4.0
        {
            if(session_id() == '')
                session_start();
        }
    }

1voto

Thielicious Punkte 3590
if (version_compare(PHP_VERSION, "5.4.0") >= 0) {
    $sess = session_status();
    if ($sess == PHP_SESSION_NONE) {
        session_start();
    }
} else {
    if (!$_SESSION) {
        session_start();
    }
}

Eigentlich ist es jetzt zu spät, um es hier zu erklären, da es bereits gelöst ist. Es handelte sich um eine .inc-Datei eines meiner Projekte, in dem man ein Menü für ein Restaurant konfiguriert, indem man ein Gericht auswählt und die Bestellung entfernt/hinzufügt oder ändert. Der Server, an dem ich gearbeitet habe, hatte nicht die aktuelle Version, also habe ich sie flexibler gestaltet. Es liegt im Ermessen des Autors, ob er es verwenden und ausprobieren möchte.

1voto

NiroshanJ Punkte 558

Funktioniert dieses Codeschnipsel für Sie?

if (!count($_SESSION)>0) {
    session_start();
}

1voto

Rotimi Punkte 4700

Damit kann ich feststellen, ob eine Sitzung begonnen hat. Durch die Verwendung von empty und isset wie folgt:

if (empty($_SESSION)  && !isset($_SESSION))  {
    session_start();
}

0voto

Christian Kruse Punkte 23

PHP_VERSION_ID ist ab PHP 5.2.7 verfügbar, also überprüfen Sie dies zuerst und erstellen Sie es, falls nötig. session_status ist ab PHP 5.4 verfügbar, also müssen wir auch dies überprüfen:

if (!defined('PHP_VERSION_ID')) {
    $version = explode('.', PHP_VERSION);
    define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
}else{
    $version = PHP_VERSION_ID;
}
if($version < 50400){
    if(session_id() == '') {
        session_start();
    }
}else{
    if (session_status() !== PHP_SESSION_ACTIVE) {
        session_start();
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X