Heim > Backend-Entwicklung > Golang > 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?

Susan Sarandon
Freigeben: 2024-11-03 02:31:29
Original
230 Leute haben es durchsucht

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

Sitzungsvariablen in Gorilla-Sitzungen werden während ihrer Verwendung nicht beibehalten

Problem

Bei der Verwendung des Gorilla Sessions-Web-Toolkits werden Sitzungsvariablen nicht über 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 / festlegen.
  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 { // Überprüfen Sie, 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 potenzielle 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):

<code class="go">// 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)
    }
}</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum werden Gorilla Sessions-Variablen in meiner Webanwendung nicht über alle Anforderungen hinweg beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage