Für mich funktionierte es einfach durch Entfernen von session_start (). Wenn die Sitzung bereits gestartet ist, warum müssen wir sie dann erneut starten. In meinem Fall war es nur eine config.php-Datei, die im Code enthalten war
Mangesh Sathe
Ich habe session_start()in eines meiner Includes und require_oncees in jede Datei eingefügt, die ich brauche.
Dies erleichtert die Implementierung der Sicherheit, wenn Sie eine Masterseite verwenden, um alle Ihre Inhalte zu verpacken.
Raymond Wachaga
Dies wird auch für die Zeiten empfohlen, in denen Sie möglicherweise die Datei mit session_start () laden oder nicht, also gute Standardpraxis
Steve Whitby
29
Wenn Sie ein neues möchten, tun session_destroy()Sie dies, bevor Sie es starten. Um zu überprüfen, ob es eingestellt ist, bevor Sie es starten, rufen Sie an session_status():
$status = session_status();
if($status == PHP_SESSION_NONE){
//There is no active session
session_start();
}elseif($status == PHP_SESSION_DISABLED){
//Sessions are not available
}elseif($status == PHP_SESSION_ACTIVE){
//Destroy current and start new one
session_destroy();
session_start();
}
Ich möchte vermeiden , die globale Überprüfung $_SESSIONstatt der ich das nenne session_status()Methode , da PHP diese Funktion explizit implementiert:
Sitzungsstatus über die neue Funktion session_status verfügbar machen Dies ist für (PHP> = 5.4.0)
Ja, Sie können durch Überprüfen feststellen, ob die Sitzung bereits ausgeführt wird isset($_SESSION). Die beste Antwort ist jedoch, nicht session_start()mehr als einmal anzurufen .
Es sollte sehr früh in Ihrem Skript aufgerufen werden, möglicherweise sogar in der ersten Zeile, und dann nicht erneut aufgerufen werden.
Wenn Sie es an mehr als einer Stelle in Ihrem Code haben, fragen Sie nach dieser Art von Fehler. Schneiden Sie es so ab, dass es nur an einer Stelle ist und nur einmal aufgerufen werden kann.
Die Sitzungsdatei bleibt gesperrt, bis das Skript abgeschlossen oder die Sitzung manuell geschlossen wird.
Daher sollte eine Seite standardmäßig eine Sitzung im schreibgeschützten Modus öffnen. Sobald es jedoch schreibgeschützt geöffnet ist, muss es geschlossen und erneut geöffnet werden, um es in den Schreibmodus zu versetzen.
const SESSION_DEFAULT_COOKIE_LIFETIME = 86400;
/**
* Open _SESSION read-only
*/functionOpenSessionReadOnly() {
session_start([
'cookie_lifetime' => SESSION_DEFAULT_COOKIE_LIFETIME,
'read_and_close' => true, // READ ACCESS FAST
]);
// $_SESSION is now defined. Call WriteSessionValues() to write out values
}
/**
* _SESSION is read-only by default. Call this function to save a new value
* call this function like `WriteSessionValues(["username"=>$login_user]);`
* to set $_SESSION["username"]
*
* @param array $values_assoc_array
*/functionWriteSessionValues($values_assoc_array) {
// this is required to close the read-only session and // not get a warning on the next line.
session_abort();
// now open the session with write access
session_start([ 'cookie_lifetime' => SESSION_DEFAULT_COOKIE_LIFETIME ]);
foreach ($values_assoc_array as $key => $value) {
$_SESSION[ $key ] = $value;
}
session_write_close(); // Write session data and end session
OpenSessionReadOnly(); // now reopen the session in read-only mode.
}
OpenSessionReadOnly(); // start the session for this page
Wenn Sie dann gehen, um einen Wert zu schreiben:
WriteSessionValues(["username"=>$login_user]);
Die Funktion benötigt ein Array von Schlüssel => Wertepaaren, um sie noch effizienter zu machen.
Keine der oben genannten Optionen war geeignet, ohne session_start () in allen PHP-Dateien aufzurufen, die von $ Session-Variablen abhängen. Sie werden nicht enthalten sein. Der Hinweis ist so nervig und füllt das Error_log schnell aus. Die einzige Lösung, die ich finden kann, die funktioniert, ist diese ....
Überprüfen Sie den Sitzungsstatus mit session_status, der den aktuellen Sitzungsstatus zurückgibt. Wenn die aktuelle Sitzung bereits funktioniert, kehren Sie mit nichts anderem zurück, wenn die Sitzung nicht funktioniert. Starten Sie die Sitzung
session_start()
in eines meiner Includes undrequire_once
es in jede Datei eingefügt, die ich brauche.Antworten:
Versuchen
<?php if(!isset($_SESSION)) { session_start(); } ?>
quelle
Wenn Sie ein neues möchten, tun
session_destroy()
Sie dies, bevor Sie es starten. Um zu überprüfen, ob es eingestellt ist, bevor Sie es starten, rufen Sie ansession_status()
:$status = session_status(); if($status == PHP_SESSION_NONE){ //There is no active session session_start(); }else if($status == PHP_SESSION_DISABLED){ //Sessions are not available }else if($status == PHP_SESSION_ACTIVE){ //Destroy current and start new one session_destroy(); session_start(); }
Ich möchte vermeiden , die globale Überprüfung
$_SESSION
stattderich das nennesession_status()
Methode , da PHP diese Funktion explizit implementiert:quelle
Nur wenn Sie die vorherige Sitzung zerstören möchten:
<?php if(!isset($_SESSION)) { session_start(); } else { session_destroy(); session_start(); } ?>
oder du kannst verwenden
unset($_SESSION['variable_session _data'])
um eine bestimmte Sitzungsvariable zu zerstören.
quelle
Geschlossenes Spiel
quelle
Ja, Sie können durch Überprüfen feststellen, ob die Sitzung bereits ausgeführt wird
isset($_SESSION)
. Die beste Antwort ist jedoch, nichtsession_start()
mehr als einmal anzurufen .Es sollte sehr früh in Ihrem Skript aufgerufen werden, möglicherweise sogar in der ersten Zeile, und dann nicht erneut aufgerufen werden.
Wenn Sie es an mehr als einer Stelle in Ihrem Code haben, fragen Sie nach dieser Art von Fehler. Schneiden Sie es so ab, dass es nur an einer Stelle ist und nur einmal aufgerufen werden kann.
quelle
Sie müssen den Sitzungsstart bereits aufgerufen haben, vielleicht wird er über ein Include erneut aufgerufen?
if( ! $_SESSION) { session_start(); }
quelle
Notice: Undefined variable: _SESSION
. Verwenden Sieisset
stattdessen.Ich bin auf dieses Problem gestoßen, als ich versucht habe, das Blockierungsverhalten von $ _SESSION zu beheben.
http://konrness.com/php5/how-to-prevent-blocking-php-requests/
Daher sollte eine Seite standardmäßig eine Sitzung im schreibgeschützten Modus öffnen. Sobald es jedoch schreibgeschützt geöffnet ist, muss es geschlossen und erneut geöffnet werden, um es in den Schreibmodus zu versetzen.
const SESSION_DEFAULT_COOKIE_LIFETIME = 86400; /** * Open _SESSION read-only */ function OpenSessionReadOnly() { session_start([ 'cookie_lifetime' => SESSION_DEFAULT_COOKIE_LIFETIME, 'read_and_close' => true, // READ ACCESS FAST ]); // $_SESSION is now defined. Call WriteSessionValues() to write out values } /** * _SESSION is read-only by default. Call this function to save a new value * call this function like `WriteSessionValues(["username"=>$login_user]);` * to set $_SESSION["username"] * * @param array $values_assoc_array */ function WriteSessionValues($values_assoc_array) { // this is required to close the read-only session and // not get a warning on the next line. session_abort(); // now open the session with write access session_start([ 'cookie_lifetime' => SESSION_DEFAULT_COOKIE_LIFETIME ]); foreach ($values_assoc_array as $key => $value) { $_SESSION[ $key ] = $value; } session_write_close(); // Write session data and end session OpenSessionReadOnly(); // now reopen the session in read-only mode. } OpenSessionReadOnly(); // start the session for this page
Wenn Sie dann gehen, um einen Wert zu schreiben:
WriteSessionValues(["username"=>$login_user]);
Die Funktion benötigt ein Array von Schlüssel => Wertepaaren, um sie noch effizienter zu machen.
quelle
Versuche dies
if(!isset($_SESSION)){ session_start(); }
Ich schlage vor, ob_start () zu verwenden; Bevor Sie eine Sesson Varriable starten, sollten Sie Ihren Browser-Puffer bestellen.
edit: Nach $ _SESSION wurde ein Extra hinzugefügt
quelle
Keine der oben genannten Optionen war geeignet, ohne session_start () in allen PHP-Dateien aufzurufen, die von $ Session-Variablen abhängen. Sie werden nicht enthalten sein. Der Hinweis ist so nervig und füllt das Error_log schnell aus. Die einzige Lösung, die ich finden kann, die funktioniert, ist diese ....
Eine schlechte Lösung, aber es funktioniert.
quelle
Es wäre effizienter:
Fehlerbehandlung auf dem Bildschirm vermeiden
Beste,
quelle
<?php if ( session_id() != "" ) { session_start(); }
Grundsätzlich müssen Sie überprüfen, ob eine Sitzung gestartet wurde, bevor Sie eine andere erstellen. ... mehr lesen .
Auf der anderen Seite haben Sie eine vorhandene Sitzung zerstört, bevor Sie eine andere mit erstellt haben
session_destroy()
.quelle
Verwenden Sie einfach die if-Anweisung
if(!isset($_SESSION)) { session_start(); }
oder
Überprüfen Sie den Sitzungsstatus mit session_status, der den aktuellen Sitzungsstatus zurückgibt. Wenn die aktuelle Sitzung bereits funktioniert, kehren Sie mit nichts anderem zurück, wenn die Sitzung nicht funktioniert. Starten Sie die Sitzung
quelle