it-swarm.com.de

Sitzungsvariable nach Gebrauch löschen

Ist es möglich, eine Sitzungsvariable zu verwenden und sie anschließend direkt zu löschen?

Beispiel:

//====
//Process Form
if ($_POST['Submit']) {
    $update = $userSettings->update($_POST);

    //If there are form errors
 if (!$update) {
        //Load the errors into an array
        $errors = $update[1];
    } else {
        //Set the session
        $_SESSION['showUpdated'] = true;

        //Redirect to this page
        header("Location: http://www.mysite.com/settings");
    }
}

//==================

if ($_SESSION['showUpdated']) {
 echo "Settings Updated";
    unset($_SESSION['showUpdated'];
}

Also, nachdem das Formular gesendet wurde, wenn keine Fehler vorhanden sind:

  • Legen Sie in einer Sitzung fest, dass das Senden des Formulars in Ordnung war
  • Laden Sie die Seite neu (um zu verhindern, dass erneut POST data) gesendet werden.
  • Wenn die Sitzungsvariable 'showUpdated' festgelegt ist, zeigen Sie die Meldung "Aktualisiert" an
  • Setzen Sie die Sitzungsvariable zurück (damit die Meldung beim nächsten Neuladen nicht angezeigt wird)

Derzeit besteht das Problem darin, dass Sie die Sitzungsvariable unmittelbar danach aufheben. Es ist, als hätten Sie es vor dem Teil "Wenn vorhanden" aufgehoben.

Irgendwelche Lösungen? Ist das überhaupt der beste Weg, um es zu tun?

Danke vielmals!

12
steveneaston

Das sieht so aus, als sollte es funktionieren. Stellen Sie sicher, dass Sie session_start () aufrufen, bevor Sie versuchen, die Sitzung zu verwenden, und exit () oder die () () immer nach einem Umleitungsheader.

Ich schaffe das, was Sie tun, etwas anders. Ich behalte in der Sitzung ein Nachrichtenelement. Ich stelle Text wie "Ihre Daten wurden gespeichert", Fehlermeldungen usw. ein. Dann überprüfe ich auf jeder Seite (tatsächlich in einer Seitenvorlagenklasse), ob der $_SESSION['message'] gesetzt und nicht leer ist. Wenn dort etwas ist, zeige ich die Nachricht an und setze den Wert auf eine leere Zeichenfolge oder Null.

3
Scott Saunders

Ich habe einen kleinen Fehler im ursprünglichen Beispiel bemerkt, der andere Probleme verursachen könnte.

unset($_SESSION['showUpdated'];

muss sein

unset($_SESSION['showUpdated']);

Wenn dieses Ende ) nicht in der unset enthalten ist, wird ein Fehler verursacht.

23
donlaur

Ich mache das ab und zu. Ich habe nie Probleme damit. Was ich aber zu Ihrem hinzufügen würde, ist ein Aufruf der Funktion exit() nach der Header-Umleitung.

BEARBEITEN: Der Grund für die exit() ist, dass es verhindert, dass weiterer Code verarbeitet wird, und dass die Möglichkeit des Aufhebens vor der Überprüfung nach der Weiterleitung ausgeschlossen wird.

3
spinon

Der Headeraufruf ohne einen Exit danach wird die Seite weiter ausführen.

header("Location: http://www.mysite.com/settings");
exit;

Verwenden Sie stattdessen diese Option, um die Seite zu beenden und die Sitzungsvariable für denselben Seitenaufruf nicht zu deaktivieren. 

2
Brad F Jacobs

Überprüfen Sie einfach, ob es existiert. Dies ist sicher, bevor es definiert wurde, und wird Ihnen Ihre Antwort mitteilen, nachdem es definiert wurde. 

if(!empty($_SESSION['showUpdated'])) {
1
TheJacobTaylor

Oder Sie können es einfach auf falsch setzen.

 if ($ _SESSION ['showUpdated']) {
 echo "Einstellungen aktualisiert"; 
 $ _SESSION ['showUpdated'] = false; 
} 

Und es sieht so aus, als würden Sie eine kleinere Version von PHP als 5.3 verwenden, denn in 5.3 werden Sie feststellen, wenn Sie einen nicht initialisierten Wert verwenden. Sie sollten also die isset-Funktion verwenden:

 if (isset ($ _ SESSION ['showUpdated']) && $ _SESSION ['showUpdated']) {
 echo "Einstellungen aktualisiert"; 
 $ _SESSION ['showUpdated'] = falsch; 
} 
0
tomasbelusky