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.
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!