
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?

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

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

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.

supersuphot
Für alle PHP-Versionen
if ((function_exists('session_status')
&& session_status() !== PHP_SESSION_ACTIVE) || !session_id()) {
session_start();
}
9899500cookie-checkÜberprüfen Sie, ob die PHP-Sitzung bereits gestartet wurdeyes
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