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?

892voto

lovelyramos Punkte 8929

Empfohlener Weg für Versionen von PHP >= 5.4.0 , PHP 7, PHP 8

if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

Referenz: http://www.php.net/manual/en/function.session-status.php

Für Versionen von PHP < 5.4.0

if(session_id() == '') {
    session_start();
}

165voto

Alex Punkte 3019

Für PHP-Versionen vor PHP 5.4.0:

if(session_id() == '') {
    // session isn't started
}

Allerdings sollte man IMHO wirklich darüber nachdenken, den Code für die Sitzungsverwaltung zu überarbeiten, wenn man nicht weiß, ob eine Sitzung gestartet ist oder nicht...

Allerdings ist meine Meinung subjektiv, und es gibt Situationen (Beispiele dafür sind in den nachstehenden Kommentaren beschrieben), in denen es nicht möglich ist zu wissen, ob die Sitzung begonnen hat.

73voto

BenMorel Punkte 31531

PHP 5.4 eingeführt session_status() was zuverlässiger ist als das Verlassen auf session_id() .

Betrachten Sie den folgenden Ausschnitt:

session_id('test');
var_export(session_id() != ''); // true, but session is still not started!
var_export(session_status() == PHP_SESSION_ACTIVE); // false

Um zu prüfen, ob eine Sitzung gestartet wurde, ist der empfohlene Weg in PHP 5.4 jetzt:

session_status() == PHP_SESSION_ACTIVE

43voto

miyuru Punkte 1081

Sie können dies tun, und es ist wirklich einfach.

if (!isset($_SESSION)) session_start();

24voto

k.bon Punkte 388
if (version_compare(phpversion(), '5.4.0', '<')) {
     if(session_id() == '') {
        session_start();
     }
 }
 else
 {
    if (session_status() == PHP_SESSION_NONE) {
        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