Dans une implémentation de sessions Gorilla, les variables de session ne sont pas conservées entre les requêtes . Après vous être connecté et avoir défini la variable de session, un nouvel onglet devrait maintenir la session, mais à la place, les utilisateurs sont redirigés vers la page de connexion.
<code class="go">sessionNew.Save(req, res)</code>
Ce code manque d'erreur gestion de sessionNew.Save(). Si le processus de sauvegarde échoue, l'erreur sera ignorée, entraînant un comportement inattendu. Il doit être mis à jour vers :
<code class="go">err := sessionNew.Save(req, res) if err != nil { // Handle the error }</code>
Le chemin de la session est défini sur "/loginSession", ce qui limite la portée de la session à ce chemin spécifique uniquement. Cela peut prêter à confusion car les utilisateurs visitant d'autres itinéraires n'auront pas accès à la session. Pour garantir que la session est disponible sur toutes les routes, le chemin doit être défini sur "/".
Dans SessionHandler, la vérification de session est effectuée après avoir servi des fichiers statiques. Cela peut entraîner des problèmes car les fichiers statiques sont servis avant la validation de la session. La vérification de session doit être effectuée avant de diffuser un contenu.
<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>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!