Sitzungsbehandlung mit dem PRG-Muster und Flashing

WBOY
Freigeben: 2024-07-18 21:46:21
Original
433 Leute haben es durchsucht

Session Handling with the PRG pattern and Flashing

In unserem vorherigen Projekt war die direkte Rückgabe einer Ansicht aus der POST-Anfrage bei fehlgeschlagener Validierung nicht der beste Ansatz.

Das Problem

Wenn ein Benutzer ein Anmeldeformular mit ungültigen Daten sendet, zeigt das Formular Fehlermeldungen an und leitet den Benutzer zur Anmeldeseite weiter. Wenn der Benutzer jedoch die Seite aktualisiert oder wegnavigiert und zur Anmeldeseite zurückkehrt, bleiben dieselben Fehlermeldungen bestehen.

Die Lösung

Um dieses Problem zu beheben, können wir Sitzungen verwenden, um Fehler zu speichern und das PRG-Muster zu implementieren. Wir können Fehler in der superglobalen Variablen $_SESSION speichern und die Fehleranweisung in create.php wie folgt aktualisieren:

$_SESSION['errors'] = $form->errors();
view('session/create.view.php', [ 'errors' => $_SESSION['errors'] ?? [] ]);
Nach dem Login kopieren

Aber selbst mit dieser Änderung besteht das Problem weiterhin. Um dieses Problem zu lösen, müssen wir die Return-Anweisung wie folgt ändern:

return redirect ('/login');

Nach dem Login kopieren


l
Wenn ein Fehler aufgetreten ist, wird der Benutzer zur Anmeldeseite weitergeleitet, Benutzer w
wird der Fehler jedoch nicht angezeigt Anschließend flashen wir die superglobale Variable $_SESSION, um die Sitzung nach kurzer Zeit zu zerstören:

$_SESSION['_flashed']['errors'] = $form->errors();
Nach dem Login kopieren

Jetzt können Sie feststellen, dass das Problem gelöst ist, aber um diesen Code umzugestalten, müssen wir die PRG-Methode in einer Klasse hinzufügen

Die Session-Klasse (PRG-Muster)

Für die Umgestaltung erstellen wir eine neue Datei mit dem Namen Core/Session.php, die eine Session-Klasse enthält, die Benutzersitzungen verwaltet:

<?php 
namespace Core;
class Session {
    public static function has($key) {
        return (bool) static::get($key);
    }
    public static function put($key, $value) {
        $_SESSION[$key] = $value;
    }
    public static function get($key, $default = null) {
        return $_SESSION['_flash'][$key] ?? $_SESSION[$key] ?? $default;
    }
    public static function flash($key, $value) {
        $_SESSION['_flash'][$key] = $value;
    }
    public static function unflash() {
        unset($_SESSION['_flash']);
    }
    public static function flush() {
        $_SESSION = [];
    }
    public static function destroy() {
        static::flush();
        session_destroy();
        $params = session_get_cookie_params();
        setcookie('PHPSESSID', '', time() - 3600, $params['path'], $params['domain'], $params['secure'], $params['httponly']);
    }
}
Nach dem Login kopieren
  1. Die Flash-Methode speichert Daten im Array $_SESSION['_flash'], das für das Flashen der Sitzung verwendet wird.
  2. Die get-Methode prüft, ob in $_SESSION['_flash'] geflashte Daten vorhanden sind, und gibt diese zurück. Wenn nicht, werden die regulären Sitzungsdaten oder der Standardwert zurückgegeben.
  3. Die Entflash-Methode löscht die geflashten Daten und macht sie nur für die nächste Anfrage verfügbar.
  4. Das PRG-Muster wird implementiert, indem Daten in der Sitzung mithilfe der Put-Methode gespeichert, umgeleitet werden (z. B. mithilfe von Return Redirect('/login');) und dann die Daten in der nächsten Anforderung mithilfe der Get-Methode abgerufen werden.

Durch die Verwendung dieser Sitzungsklasse können wir das PRG-Muster und das Sitzungs-Flashing implementieren, um Benutzersitzungen zu verwalten und doppelte Formularübermittlungen sowie unerwünschte Persistenz von Fehlermeldungen zu verhindern.

hat Methode

In dieser Datei gibt die Methode has einen booleschen Wert zurück, der angibt, ob in der Sitzung ein Schlüssel vorhanden ist:

. 

public static function has($key) {
    return (bool) static::get($key);
}
Nach dem Login kopieren

Refactoring der Abmeldefunktion

In der Datei function.php überarbeiten wir die Abmeldefunktion, um die Session-Klasse zu verwenden:

Session::destroy();
Nach dem Login kopieren

Refactoring der get-Methode

Da das Projekt bereits gut funktioniert. Aber wir müssen die Get-Methode in Core/Session.php umgestalten, um den Code in einer einzigen Anweisung zu konsolidieren:

public static function get($key, $default = null) {
    return $_SESSION['_flash'][$key] ?? $_SESSION[$key] ?? $default;
}
Nach dem Login kopieren

In unserem heutigen Projekt wird viel Refactoring durchgeführt, um das Aussehen zu verbessern, es leichter zu verstehen und die Leistung des Codes zu steigern.

Ich hoffe, dass Sie es klar verstanden haben!.

Das obige ist der detaillierte Inhalt vonSitzungsbehandlung mit dem PRG-Muster und Flashing. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage