Maison >développement back-end >Golang >Pourquoi mes variables de session ne sont-elles pas conservées à l'aide de Gorilla Sessions ?

Pourquoi mes variables de session ne sont-elles pas conservées à l'aide de Gorilla Sessions ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-03 00:22:02574parcourir

Why are my session variables not being preserved using Gorilla Sessions?

Variables de sessions non conservées à l'aide de Gorilla Sessions

Dans votre demande d'assistance pour la gestion des sessions à l'aide de Gorilla Sessions, vous avez décrit un problème où les valeurs de session n'étaient pas conservées d'une requête à l'autre. .

Un problème potentiel réside dans le chemin que vous définissez pour le magasin de session. En définissant le chemin sur /loginSession, vous limitez la validité de la session à ce chemin spécifique. Pour garantir que les sessions sont cohérentes sur tous les chemins, vous devez plutôt définir le chemin sur / :

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

Un autre point à considérer est la façon dont vous vérifiez les valeurs de session. Au lieu d'utiliser session.Values["email"] == nil, vous devez taper assert the value dans une chaîne pour gérer correctement les valeurs vides :

if val, ok := session.Values["email"].(string); ok {
    // if val is a string
    switch val {
        case "":
            http.Redirect(res, req, "html/login.html", http.StatusFound)
        default:
            http.Redirect(res, req, "html/home.html", http.StatusFound)
    }
} else {
    // if val is not a string type
    http.Redirect(res, req, "html/login.html", http.StatusFound)
}

Vous devez également vérifier les erreurs lors de l'enregistrement des sessions :

err := sessionNew.Save(req, res)
if err != nil {
    // handle the error case
}

Enfin, assurez-vous d'obtenir et de valider la session avant de servir des fichiers statiques dans la fonction SessionHandler :

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

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

En résolvant ces problèmes, vous devriez être en mesure de vous assurer que les variables de session sont correctement conservées dans les requêtes utilisant Gorilla Sessions.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn