Maison > développement back-end > Golang > le corps du texte

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

Susan Sarandon
Libérer: 2024-11-03 02:31:29
original
165 Les gens l'ont consulté

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, 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 :

  1. 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 /.
  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) :

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

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!