Heim >Backend-Entwicklung >Golang >Warum werden meine Golang-Sitzungsvariablen nicht in Gorilla-Sitzungen gespeichert?

Warum werden meine Golang-Sitzungsvariablen nicht in Gorilla-Sitzungen gespeichert?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-03 20:41:29323Durchsuche

Why Are My Golang Session Variables Not Being Saved in Gorilla Sessions?

Sitzungsvariablen in Golang werden bei der Verwendung von Gorilla-Sitzungen nicht gespeichert

Problembeschreibung

In einer Gorilla-Sitzungsimplementierung werden Sitzungsvariablen nicht über Anfragen hinweg beibehalten . Nach der Anmeldung und dem Festlegen der Sitzungsvariablen sollte ein neuer Tab die Sitzung verwalten, stattdessen werden Benutzer jedoch zur Anmeldeseite weitergeleitet.

Codeanalyse

<code class="go">sessionNew.Save(req, res)</code>

Dieser Code fehlt Fehler Handhabung für sessionNew.Save(). Wenn der Speichervorgang fehlschlägt, wird der Fehler ignoriert, was zu unerwartetem Verhalten führt. Es sollte aktualisiert werden auf:

<code class="go">err := sessionNew.Save(req, res)
if err != nil {
    // Handle the error
}</code>

Sitzungspfad

Der Sitzungspfad ist auf „/loginSession“ festgelegt, wodurch der Sitzungsbereich nur auf diesen bestimmten Pfad beschränkt wird. Dies kann zu Verwirrung führen, da Benutzer, die andere Routen besuchen, keinen Zugriff auf die Sitzung haben. Um sicherzustellen, dass die Sitzung auf allen Routen verfügbar ist, sollte der Pfad auf „/“ gesetzt werden.

Sitzungsprüfung

Im SessionHandler wird die Sitzungsprüfung nach der Bereitstellung statischer Dateien durchgeführt. Dies kann zu Problemen führen, da die statischen Dateien bereitgestellt werden, bevor die Sitzung validiert wird. Die Sitzungsprüfung sollte durchgeführt werden, bevor Inhalte bereitgestellt werden.

Vollständiger Code mit Verbesserungen

<code class="go">package main

import (
    "crypto/md5"
    "encoding/hex"
    "fmt"
    "github.com/gocql/gocql"
    "github.com/gorilla/mux"
    "github.com/gorilla/sessions"
    "net/http"
    "time"
)

var store = sessions.NewCookieStore([]byte("something-very-secret"))

var router = mux.NewRouter()

func init() {

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

func main() {
    //session handling
    router.HandleFunc("/", sessionHandler)
    router.HandleFunc("/signIn", signInHandler)
    router.HandleFunc("/signUp", signUpHandler)
    router.HandleFunc("/logOut", logOutHandler)
    http.Handle("/", router)
    http.ListenAndServe(":8100", nil)
}

//handler for signIn
func signInHandler(res http.ResponseWriter, req *http.Request) {

    // Get the session
    session, err := store.Get(req, "loginSession")
    if err != nil {
        // Handle the error
    }

    // Set session values
    session.Values["email"] = req.FormValue("email")
    session.Values["name"] = req.FormValue("password")

    // Save the session
    err = session.Save(req, res)
    if err != nil {
        // Handle the error
    }
}

//handler for signUp
func signUpHandler(res http.ResponseWriter, req *http.Request) {
    // ...
}

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

    // Save the session (with updated values)
    err = session.Save(req, res)
    if err != nil {
        // Handle the error
    }
}

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

    // Check if the session is valid
    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>

Das obige ist der detaillierte Inhalt vonWarum werden meine Golang-Sitzungsvariablen nicht in Gorilla-Sitzungen gespeichert?. 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