Allez les variables de session?
Je suis nouveau sur le langage Go (Golang) et je suis en train d'écrire une application basée sur le web. J'aimerais utiliser des variables de session, comme le genre en PHP (les variables qui sont disponibles à partir d'une page à l'autre et unique pour une session d'utilisateur). Est-il quelque chose comme ça en Aller? Si non, comment pourrais-je aller sur la mise en œuvre moi-même? Ou ce que d'autres méthodes sont là?
Vous devez vous connecter pour publier un commentaire.
Vous avez probablement envie de prendre un coup d'oeil à gorille. Il a la session de prise en charge comme indiqué ici.
Autre que celui ou peut-être l'un de l'autre web des outils pour aller vous auriez à rouler votre propre.
Solutions possibles pourraient être:
Je vous laisse les détails de mise en œuvre de chacun de ces pour le lecteur.
Voici une alternative dans le cas où vous voulez juste session de prise en charge sans remplir de web toolkit.
https://github.com/bpowers/seshcookie
Voici une autre alternative (divulgation: je suis l'auteur):
https://github.com/icza/session
Citant son doc:
Ce paquet fournit un outil facile à utiliser, extensible et sécurisé session de la mise en œuvre et de gestion. La documentation du paquet peut être trouvé et godoc.org:
https://godoc.org/github.com/icza/session
C'est "juste" une session HTTP, mise en œuvre et de la gestion, vous pouvez l'utiliser tel quel, ou avec n'importe quel web outils et de cadres de.
Aperçu
Il y a 3 clés joueurs dans le package:
Session
est l' (HTTP) interface de session. Nous pouvons l'utiliser pour stocker et récupérer des constantes et variables des attributs à partir d'elle.Store
est une session interface de banque qui est responsable de stocker les sessions et de les rendre accessibles par leur Id sur le côté serveur.Manager
est un gestionnaire de session de l'interface, qui est responsable pour l'acquisition d'uneSession
à partir d'un (nouveau) de la requête HTTP, et pour ajouter unSession
à une réponse HTTP à laisser le client sait à propos de la session. UnManager
a un supportStore
qui est responsable de la gestionSession
valeurs à côté serveur.Joueurs de ce package sont représentés par des interfaces, et les différentes implémentations sont fournis pour tous ces joueurs.
Vous n'êtes pas lié par la condition implémentations, n'hésitez pas à fournir vos propres mises en œuvre pour l'ensemble des acteurs.
Utilisation
D'utilisation ne peut pas être plus simple que cela. Pour obtenir la session en cours associé avec le http.Demande:
De créer une nouvelle session (par exemple sur une connexion réussie) et l'ajouter à un http.ResponseWriter (pour laisser le client sait à propos de la session):
Nous allons voir plus avancés de création de session: nous allons fournir un attribut constant (pour la durée de vie de la session) et d'une première variable d'attribut:
Et pour accéder à ces attributs et la valeur de changement de
"Count"
:(Bien sûr variable attributs peuvent être ajoutés plus tard trop avec
Session.SetAttr()
, pas seulement à la création de session.)Pour supprimer une session (par exemple, lors de la déconnexion):
Découvrez la séance de démonstration de l'application qui montre toutes ces en action.
Google App Engine support
Le package fournit le support pour Google App Engine (GAE) plate-forme.
La documentation n'est pas inclus (en raison de la
+build appengine
construire contrainte), mais ici il est: gae_memcache_store.allerLa mise en œuvre de magasins de sessions dans le Memcache et enregistre également des séances de la banque de données comme une sauvegarde au cas où les données sont supprimées à partir de la Memcache. Ce comportement est facultatif, Magasin de données peut être complètement désactivé. Vous pouvez également choisir l'épargne à la banque de données est synchrone (dans le même goroutine) ou asynchrone (dans un autre goroutine), résultant en temps de réponse plus rapides.
Nous pouvons utiliser
NewMemcacheStore()
etNewMemcacheStoreOptions()
fonctions pour créer une session Magasin de mise en œuvre qui stocke les sessions en FGA de Memcache. Important de noter que, depuis l'accès à la Memcache s'appuie sur Appengine Contexte qui est lié à unhttp.Request
, le renvoi du Store ne peuvent être utilisés pour la durée de vie d'une demande! Prenez Note que le Magasin sera automatiquement "flush" sessions accessible à partir de quand le Magasin est fermé, il est très important de fermer le Magasin à la fin de votre demande; ceci est habituellement fait par la fermeture de la session manager à qui vous avez passé le store (de préférence avec le reporter de déclaration).Ainsi, dans chaque traitement de la demande, nous devons créer un nouveau gestionnaire de session à l'aide d'un nouveau Magasin, et nous pouvons utiliser le gestionnaire de session pour faire session tâches liées à quelque chose comme ceci:
Sessions expirées ne sont pas automatiquement supprimées de la base de données. Pour supprimer les sessions expirées, le paquet fournit un
PurgeExpiredSessFromDSFunc()
fonction qui retourne unhttp.HandlerFunc
. Il est recommandé d'enregistrer le retour de la fonction du gestionnaire d'un chemin qui peut alors être définie comme une tâche cron pour être appelé périodiquement, par exemple à toutes les 30 minutes environ (selon votre choix). Comme cron gestionnaires peuvent fonctionner jusqu'à 10 minutes, le retour de l'gestionnaire s'arrête à 8 minutespour terminer en toute sécurité, même si il y a plus d'expiration, récupéré des séances. Il peut être enregistré comme ceci:
Découvrez la GAE session de démonstration de l'application qui montre comment il peut être utilisé.
cron.yaml fichier de la démo montre comment une tâche cron peut être défini pour purger les sessions expirées.
Découvrez la GAE session de démonstration de l'application qui montre comment utiliser cette action.
session.Remove(sess, res)
etsess = nil