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