Wenn in meinem PHP-Code bereits eine Sitzung gestartet wurde und ich versuche, eine neue zu starten, wird folgende Meldung angezeigt:
Hinweis: Eine Sitzung wurde bereits gestartet. Session_start () wird ignoriert.
Wie kann ich das vermeiden?
Wenn in meinem PHP-Code bereits eine Sitzung gestartet wurde und ich versuche, eine neue zu starten, wird folgende Meldung angezeigt:
Hinweis: Eine Sitzung wurde bereits gestartet. Session_start () wird ignoriert.
Wie kann ich das vermeiden?
session_start()
in eines meiner Includes und require_once
es in jede Datei eingefügt, die ich brauche.
Antworten:
Versuchen
<?php
if(!isset($_SESSION))
{
session_start();
}
?>
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();
}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
statt 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.
Sie müssen den Sitzungsstart bereits aufgerufen haben, vielleicht wird er über ein Include erneut aufgerufen?
if( ! $_SESSION)
{
session_start();
}
Notice: Undefined variable: _SESSION
. Verwenden Sie isset
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/
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
*/
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.
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
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 ....
error_reporting(E_ALL ^ E_NOTICE);
session_start();
Eine schlechte Lösung, aber es funktioniert.
<?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()
.
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
session_status() === PHP_SESSION_ACTIVE ?: session_start();