Heim >Backend-Entwicklung >Golang >Warum werden meine Sitzungsvariablen mit Gorilla Sessions nicht beibehalten?

Warum werden meine Sitzungsvariablen mit Gorilla Sessions nicht beibehalten?

Susan Sarandon
Susan SarandonOriginal
2024-11-03 00:22:02567Durchsuche

Why are my session variables not being preserved using Gorilla Sessions?

Sitzungsvariablen werden bei Verwendung von Gorilla Sessions nicht beibehalten

In Ihrer Anfrage um Unterstützung bei der Sitzungsverwaltung mithilfe von Gorilla Sessions haben Sie ein Problem beschrieben, bei dem Sitzungswerte nicht über alle Anfragen hinweg beibehalten wurden .

Ein potenzielles Problem liegt im Pfad, den Sie für den Sitzungsspeicher festlegen. Indem Sie den Pfad auf /loginSession festlegen, beschränken Sie die Gültigkeit der Sitzung auf diesen bestimmten Pfad. Um sicherzustellen, dass Sitzungen über alle Pfade hinweg konsistent sind, sollten Sie den Pfad stattdessen auf / setzen:

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

Ein weiterer zu berücksichtigender Punkt ist die Art und Weise, wie Sie Sitzungswerte überprüfen. Anstatt session.Values["email"] == nil zu verwenden, sollten Sie den Wert in eine Zeichenfolge eingeben, um leere Werte korrekt zu verarbeiten:

if val, ok := session.Values["email"].(string); ok {
    // if val is a string
    switch val {
        case "":
            http.Redirect(res, req, "html/login.html", http.StatusFound)
        default:
            http.Redirect(res, req, "html/home.html", http.StatusFound)
    }
} else {
    // if val is not a string type
    http.Redirect(res, req, "html/login.html", http.StatusFound)
}

Sie sollten beim Speichern von Sitzungen auch auf Fehler prüfen:

err := sessionNew.Save(req, res)
if err != nil {
    // handle the error case
}

Stellen Sie abschließend sicher, dass Sie die Sitzung abrufen und validieren, bevor Sie statische Dateien in der SessionHandler-Funktion bereitstellen:

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

    if session.Values["email"] == nil {
        http.Redirect(res, req, "html/login.html", http.StatusFound)
    } else {
        http.Redirect(res, req, "html/home.html", http.StatusFound)
    }
}

Durch die Behebung dieser Probleme sollten Sie dies sicherstellen können Sitzungsvariablen werden bei Verwendung von Gorilla Sessions über alle Anfragen hinweg korrekt beibehalten.

Das obige ist der detaillierte Inhalt vonWarum werden meine Sitzungsvariablen mit Gorilla Sessions nicht beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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