Les variables de session dans les sessions Gorilla ne sont pas conservées lors de leur utilisation
Problème
Lors de l'utilisation de la boîte à outils Web Gorilla Sessions, les variables de session ne sont pas conservées dans les requêtes. Lorsque le serveur démarre et que les utilisateurs visitent localhost:8100/, ils sont dirigés vers login.html car les valeurs de session n'existent pas. Lors de la connexion, les variables de session sont stockées et les utilisateurs sont redirigés vers home.html. Cependant, ouvrir un nouvel onglet et saisir localhost:8100/ dirige les utilisateurs vers login.html au lieu de home.html comme prévu, malgré la présence de variables de session.
Explication
Plusieurs problèmes surviennent dans le code fourni :
-
Chemin de la session : Le chemin de la session est défini comme /loginSession. Cela limite la validité des cookies de session à ce chemin spécifique. Pour que la session fonctionne sur différents chemins (tels que localhost:8100/home), vous devez définir le chemin de la session sur /.
-
Erreurs de syntaxe : La condition session.Values["email "] == nul est incorrect. Au lieu de cela, l'assertion de type doit être utilisée pour vérifier si la valeur de session est une chaîne : if val, ok := session.Values["email"].(string); ok { // Vérifiez si la valeur est une chaîne }.
-
Gestion des erreurs : L'opération de sauvegarde de session (sessionNew.Save(req, res)) n'est pas vérifiée pour les erreurs. Ajoutez une gestion des erreurs pour capturer et gérer tout problème potentiel lors de l'enregistrement de la session.
-
Gestion de la session dans SessionHandler : La session doit être obtenue et validée avant de servir des fichiers statiques dans le Méthode SessionHandler. De plus, le chemin du routeur ne doit pas être défini dans cette fonction car il n'est pas couvert ici. Au lieu de cela, définissez le chemin du routeur dans main() et utilisez une fonction distincte qui vérifie une session valide avant de traiter les demandes de fichiers statiques.
Extraits de code pertinents (après avoir résolu les problèmes) :
<code class="go">// Set session options
store.Options = &sessions.Options{
Domain: "localhost",
Path: "/",
MaxAge: 3600 * 8, // 8 hours
HttpOnly: true,
}
// Session handling in `SessionHandler`
func SessionHandler(res http.ResponseWriter, req *http.Request) {
session, err := store.Get(req, "loginSession")
if err != nil {
// Handle the error
}
// Check for a valid session
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>
Copier après la connexion
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!