Überprüfen Sie, ob die PHP-Sitzung bereits gestartet wurde

Lesezeit: 5 Minuten

Uberprufen Sie ob die PHP Sitzung bereits gestartet wurde
Logan

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 wurde. Daher, wenn ich habe session_start() Bei diesem Skript bekomme ich manchmal die Fehlermeldung “Sitzung bereits gestartet”. Dazu habe ich diese Zeilen eingefügt:

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

aber diesmal bekam ich diese Warnmeldung:

Hinweis: Nicht definierte Variable: _SESSION

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

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

  • mögliches Duplikat von Wie überprüfe ich, ob session_start eingegeben wurde?

    – Richard Harrison

    25. Juli 2012 um 10:17 Uhr

  • Siehe auch diese Antworten von Stackoverflow:stackoverflow.com/questions/1545357/…

    – kontaktformular.co_you_go

    4. September 2015 um 17:04 Uhr


Uberprufen Sie ob die PHP Sitzung bereits gestartet wurde
schönramos

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

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

  • Ich denke, es gibt ein Problem mit der Lösung für PHP < 5.4. session_id wird beim ERSTEN Mal gesetzt, wenn die Sitzung gestartet wird, aber sie wird nicht gelöscht, wenn die Sitzung geschlossen wird. Wenn also beispielsweise vor Ihrem Snippet ein Code wie session_start();session_write_close();: dann schlägt die if-Bedingung fehl, aber wir haben keine offene Sitzung …

    – Nicolò Martini

    15. Mai 2014 um 11:26 Uhr

  • @Nicolo Martini So wie ich es verstehe: Eine Sitzung begann mit session_start() am Anfang eines Skripts ist CLOSED, wenn das Skript beendet wird, ODER wann session_write_closed() wird aufgerufen, bevor das Skript beendet wird. Das heißt, eine Sitzung wird geschlossen, wenn ihre Daten in das Sitzungscookie geschrieben werden und die Sitzung für den Zugriff durch ein anderes Skript entsperrt wird, das ebenfalls „session_start“ aufruft. CLOSING bedeutet daher NICHT, dass die Sitzung ZERSTÖRT wird. Sie können eine Sitzung schließen, indem Sie das aktuelle Skript beenden oder aufrufen session_write_close()und Sie können es erneut öffnen, indem Sie anrufen session_start(). Mein Verständnis zumindest.

    – Stefan

    15. Dezember 2016 um 12:00 Uhr

  • Ist das immer noch ein guter Weg, um eine Sitzung zu beginnen? Weil in dem Link nichts mit dieser Antwort zu tun hat

    – csandreas1

    1. Juni 2018 um 11:22 Uhr


  • @csandreas1 Sie sehen aus dem Link die Beschreibung von session_status und seine erwarteten Rückgabewerte. Die Antwort auf Ihre Frage ist ja!

    – reizender Ramos

    5. Dezember 2018 um 17:31 Uhr

  • Unter bestimmten Umständen ist dies bei mir fehlgeschlagen – ich habe if(!isset($_SESSION)) mit Erfolg verwendet

    – Scott

    29. Mai 2020 um 15:07 Uhr

1646975648 589 Uberprufen Sie ob die PHP Sitzung bereits gestartet wurde
Alex

Für PHP-Versionen vor PHP 5.4.0:

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

IMHO sollten Sie jedoch wirklich darüber nachdenken, Ihren Sitzungsverwaltungscode umzugestalten, wenn Sie nicht wissen, ob eine Sitzung gestartet wurde oder nicht …

Das heißt, meine Meinung ist subjektiv, und es gibt Situationen (Beispiele dafür sind in den Kommentaren unten beschrieben), in denen es möglicherweise nicht möglich ist, zu wissen, ob die Sitzung gestartet wurde.

  • Es ist nicht unbedingt schlecht, nicht zu wissen, ob Ihre Sitzung gestartet wurde. Wenn Sie faul laden (die Sitzung nur starten, wenn sie zum ersten Mal benötigt wird), wäre der Test in Ihrer Antwort vollkommen in Ordnung.

    – zogm

    6. Juni 2011 um 9:53 Uhr

  • In einigen Umgebungen hat Apache auch Sitzungs-Autostart eingerichtet

    – LeonardChallis

    14. September 2012 um 18:32 Uhr

  • Ein Beispiel zum Testen, ob session_id() eine leere Zeichenfolge in einer Include-Datei zurückgibt:

    – tgoneil

    5. Oktober 2012 um 8:05 Uhr

  • Der Kommentar zum Refactoring des Sitzungsmanagements, wenn Sie nicht wissen, ob es gestartet ist oder nicht, ist nicht wirklich relevant. Wenn Sie beispielsweise erweiterte Funktionen in ein WordPress-Design codieren, werden Sie nie wissen, ob ein Plugin bereits begonnen hat, Sitzungen zu verwenden, ohne dies zu überprüfen. Die Programmierwelt ist nicht immer so schwarz und weiß 😛

    – Jimbo Jonny

    27. November 2012 um 17:23 Uhr

  • Mmm, gute Punkte in der Tat. Ich gebe zu, dass meine Kommentare sehr subjektiv sind – ich werde meine Antwort ändern, um dies widerzuspiegeln.

    – Alex

    8. März 2013 um 12:58 Uhr

PHP 5.4 eingeführt Sitzungsstatus()was zuverlässiger ist als sich darauf zu verlassen 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 also zu überprüfen, ob eine Session gestartet wurde, ist der empfohlene Weg in PHP 5.4 jetzt:

session_status() == PHP_SESSION_ACTIVE

  • Ein Codeausschnitt, der session_status verwendet, wenn verfügbar, und ältere Methoden, wenn nicht, scheint hier perfekt zu sein, übrigens, Hinweis Hinweis 🙂

    – Jimbo Jonny

    27. November 2012 um 17:30 Uhr


  • Danke für das Update Benjamin. Gut zu wissen, dass ab PHP 5.4 eine neue Methode verwendet werden kann.

    – Logan

    28. November 2012 um 0:19 Uhr

  • Dies ist eine viel bessere Möglichkeit, dies zu überprüfen, Sie wissen nicht immer, ob Sie eine Sitzung gestartet haben, besonders wenn der Benutzer Cookies löscht, während er gerade die Website durchsucht … Ich codiere immer für 2-Jährige, Sie Ich weiß nie, was Benutzer tun werden 😉 Ich selbst habe eine kleine Config.php-Datei, die von allen meinen Skripten aufgerufen wird, um Variablen und andere Informationen einzurichten es wird gebraucht

    – Andy Braham

    11. Juni 2013 um 18:03 Uhr


Uberprufen Sie ob die PHP Sitzung bereits gestartet wurde
miyuru

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

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

if (version_compare(phpversion(), '5.4.0', '<')) {
     if(session_id() == '') {
        session_start();
     }
 }
 else
 {
    if (session_status() == PHP_SESSION_NONE) {
        session_start();
    }
 }

Vor PHP 5.4 gibt es keinen zuverlässigen Weg, dies zu erfahren, außer ein globales Flag zu setzen.

Erwägen:

var_dump($_SESSION); // null
session_start();
var_dump($_SESSION); // array
session_destroy();
var_dump($_SESSION); // array, but session isn't active.

Oder:

session_id(); // returns empty string
session_start();
session_id(); // returns session hash
session_destroy();
session_id(); // returns empty string, ok, but then
session_id('foo'); // tell php the session id to use
session_id(); // returns 'foo', but no session is active.

Daher sollten Sie vor PHP 5.4 einen globalen booleschen Wert setzen.

1646975649 309 Uberprufen Sie ob die PHP Sitzung bereits gestartet wurde
supersuphot

Für alle PHP-Versionen

if ((function_exists('session_status') 
  && session_status() !== PHP_SESSION_ACTIVE) || !session_id()) {
  session_start();
}

  • Ähnlich könnte man das auch machen if ((defined('PHP_SESSION_ACTIVE') && session_status() !== PHP_SESSION_ACTIVE) || !session_id())

    – Anthony Hatzopoulos

    26. November 2014 um 3:37 Uhr


989950cookie-checkÜberprüfen Sie, ob die PHP-Sitzung bereits gestartet wurde

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy