Heim  >  Artikel  >  Backend-Entwicklung  >  Warum bleiben meine Gorilla-Sitzungen nicht über alle Anfragen in meiner Go-Anwendung hinweg bestehen?

Warum bleiben meine Gorilla-Sitzungen nicht über alle Anfragen in meiner Go-Anwendung hinweg bestehen?

Linda Hamilton
Linda HamiltonOriginal
2024-11-03 05:19:03698Durchsuche

Why are my Gorilla Sessions not persisting across requests in my Go application?

Fehlerbehebung bei Gorilla-Sitzungen in Go

Problembeschreibung

Bei der Verwendung von Gorilla-Sitzungen werden Sitzungsvariablen nicht über mehrere Anfragen hinweg beibehalten. Die App leitet Benutzer trotz erfolgreicher Anmeldung und Sitzungsvariablenspeicherung zur Anmeldeseite weiter.

Lösung

1. Korrekte Pfadkonfiguration:

Auf den Sitzungsspeicher kann von anderen Pfaden aus nicht zugegriffen werden, da der Pfad auf „/loginSession“ festgelegt ist. Ändern Sie es in „/“, um die Sitzung in der gesamten Anwendung zugänglich zu machen.

2. Überprüfung des Sitzungswerts:

Vergleichen Sie session.Values["email"] nicht mit Null. Geben Sie stattdessen den Wert zu einer Zeichenfolge ein und prüfen Sie mit val == "".

3, ob er leer ist. Fehlerbehandlung:

Stellen Sie sicher, dass Fehler beim Speichern von Sitzungen mit err := sessionNew.Save(req, res) behandelt werden.

4. Sitzungsvalidierung im SessionHandler:

Validieren Sie die Sitzung, bevor Sie statische Dateien im SessionHandler bereitstellen. Leiten Sie Benutzer zur Anmeldung um, wenn der E-Mail-Sitzungswert nicht vorhanden ist.

Codekorrekturen:

Init-Funktion:

<code class="go">func init() {
    store.Options = &sessions.Options{
        Domain:   "localhost",
        Path:     "/",
        MaxAge:   3600 * 8, // 8 hours
        HttpOnly: true,
    }
}</code>

SessionHandler:

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

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

Sicherheitsempfehlungen:

Darüber hinaus ist es wichtig, bcrypt für das Passwort-Hashing zu verwenden und SQL-Abfragen zu parametrisieren, um dies zu vermeiden potenzielle Schwachstellen.

Das obige ist der detaillierte Inhalt vonWarum bleiben meine Gorilla-Sitzungen nicht über alle Anfragen in meiner Go-Anwendung hinweg bestehen?. 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