„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum werden Gorilla Sessions-Variablen in meiner Webanwendung nicht über alle Anforderungen hinweg beibehalten?

Warum werden Gorilla Sessions-Variablen in meiner Webanwendung nicht über alle Anforderungen hinweg beibehalten?

Veröffentlicht am 12.11.2024
Durchsuche:428

Why are Gorilla Sessions Variables Not Maintained Across Requests in My Web Application?

Sitzungsvariablen in Gorilla-Sitzungen werden bei ihrer Verwendung nicht beibehalten

Problem

Bei der Verwendung des Gorilla Sessions-Web-Toolkits werden Sitzungsvariablen nicht über mehrere Anfragen hinweg beibehalten. Wenn der Server startet und Benutzer localhost:8100/ besuchen, werden sie zu login.html weitergeleitet, da keine Sitzungswerte vorhanden sind. Beim Anmelden werden Sitzungsvariablen gespeichert und Benutzer werden zu home.html weitergeleitet. Wenn jedoch ein neuer Tab geöffnet und „localhost:8100/“ eingegeben wird, werden Benutzer wie erwartet zu login.html und nicht zu home.html weitergeleitet, obwohl Sitzungsvariablen vorhanden sind.

Erklärung

Es treten mehrere Probleme auf der bereitgestellte Code:

  1. Sitzungspfad: Der Sitzungspfad ist als /loginSession definiert. Dadurch wird die Gültigkeit von Sitzungscookies auf diesen bestimmten Pfad beschränkt. Damit die Sitzung über verschiedene Pfade hinweg funktioniert (z. B. localhost:8100/home), sollten Sie den Sitzungspfad auf /.
  2. Syntaxfehler: Die Bedingung session.Values["email "] == Null ist falsch. Stattdessen sollte die Typzusicherung verwendet werden, um zu prüfen, ob der Sitzungswert eine Zeichenfolge ist: if val, ok := session.Values["email"].(string); ok { // Prüfen, ob der Wert eine Zeichenfolge ist }.
  3. Fehlerbehandlung: Der Sitzungsspeichervorgang (sessionNew.Save(req, res)) wird nicht auf Fehler überprüft. Fügen Sie eine Fehlerbehandlung hinzu, um mögliche Probleme beim Speichern der Sitzung zu erfassen und zu behandeln.
  4. Sitzungsbehandlung im SessionHandler: Die Sitzung sollte abgerufen und validiert werden, bevor statische Dateien im bereitgestellt werden SessionHandler-Methode. Darüber hinaus sollte der Router-Pfad nicht innerhalb dieser Funktion festgelegt werden, da er hier keinen Gültigkeitsbereich hat. Legen Sie stattdessen den Router-Pfad in main() fest und verwenden Sie eine separate Funktion, die vor der Bearbeitung statischer Dateianforderungen prüft, ob eine gültige Sitzung vorliegt.

Relevante Codeausschnitte (nach Behebung der Probleme):

// Set session options
store.Options = &sessions.Options{
    Domain:   "localhost",
    Path:     "/",
    MaxAge:   3600 * 8, // 8 hours
    HttpOnly: true,
}

// Session handling in `SessionHandler`
func SessionHandler(res http.ResponseWriter, req *http.Request) {
    session, err := store.Get(req, "loginSession")
    if err != nil {
        // Handle the error
    }

    // Check for a valid session
    if session.Values["email"] == nil {
        http.Redirect(res, req, "html/login.html", http.StatusFound)
    } else {
        http.Redirect(res, req, "html/home.html", http.StatusFound)
    }
}
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3