Maison  >  Article  >  développement back-end  >  Pourquoi mes variables de session ne sont-elles pas persistantes dans les requêtes utilisant des sessions Gorilla ?

Pourquoi mes variables de session ne sont-elles pas persistantes dans les requêtes utilisant des sessions Gorilla ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-03 20:49:03934parcourir

Why Are My Session Variables Not Persistent Across Requests Using Gorilla Sessions?

Variables de session non conservées lors des requêtes utilisant des sessions Gorilla

Ce problème peut survenir lors de l'utilisation du middleware Gorilla Sessions pour gérer les variables de session. L'extrait de code fourni met en évidence plusieurs facteurs pouvant affecter la persistance de la session :

1. Configuration du chemin de session

Le code définit le chemin de session comme "/loginSession". Par conséquent, la session n'est valide que dans le chemin "/loginSession". Pour garantir la disponibilité de la session sur tous les itinéraires, le chemin doit être défini sur "/":

<code class="go">func init() {
    store.Options = &sessions.Options{
        Domain:   "localhost",
        Path:     "/",
        MaxAge:   3600 * 8, // 8 hours
        HttpOnly: true,
    }
}</code>

2. Comparaison de chaînes vides

Le code vérifie si session.Values["email"] == nil pour déterminer si la valeur est une chaîne vide. Cependant, comparer une chaîne vide à nil est incorrect. Utilisez plutôt l'assertion de type pour rechercher une chaîne vide :

<code class="go">if val, ok := session.Values["email"].(string); ok {
    if val == "" {
        // Do something...
    }
}</code>

3. Gestion des erreurs

Il est essentiel de gérer les erreurs lors de l'enregistrement de la session :

<code class="go">err := sessionNew.Save(req, res)
if err != nil {
    // Handle the error
}</code>

4. Ordre de validation de session

Le code sert des fichiers statiques avant de valider la session dans la fonction SessionHandler. Pour garantir une bonne validation de la session, la session doit être validée en premier :

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

    // Validate the session here...

    // Serve static files if the session is valid...
}</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!

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