Überprüfen Sie, ob die PHP-Sitzung bereits gestartet wurde
Lesezeit: 5 Minuten
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:
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
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
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.
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