"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi les variables Gorilla Sessions ne sont-elles pas conservées dans les requêtes de mon application Web ?

Pourquoi les variables Gorilla Sessions ne sont-elles pas conservées dans les requêtes de mon application Web ?

Publié le 2024-11-12
Parcourir:324

Why are Gorilla Sessions Variables Not Maintained Across Requests in My Web Application?

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, l'ouverture d'un nouvel onglet et la saisie de localhost:8100/ dirigent 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 :

  1. Chemin de session : Le chemin de 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 /.
  2. 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 }.
  3. 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.
  4. 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) :

// 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)
    }
}
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3