Sessions: Session inter-serveur Web

Créé le 24 juil. 2016  ·  11Commentaires  ·  Source: gorilla/sessions

Est-il possible de faire une session cross server en utilisant gorilla/sessions ? Supposons que j'ai plusieurs serveurs pour servir un seul site Web. Si l'utilisateur se connecte à un serveur, je m'attends à ce qu'il se connecte également à un autre serveur.

question

Commentaire le plus utile

@CasperHK C'est ce que vous obtenez par défaut avec les cookies : tant que les serveurs font tous partie du même domaine (par exemple github.com ou *.github.com), le cookie sera envoyé par le navigateur.

Alternativement, les sessions prennent également en

Tous les 11 commentaires

@CasperHK C'est ce que vous obtenez par défaut avec les cookies : tant que les serveurs font tous partie du même domaine (par exemple github.com ou *.github.com), le cookie sera envoyé par le navigateur.

Alternativement, les sessions prennent également en

gorilla/session semble parfait pour ma tâche. En fait, je souhaite utiliser Go pour mon projet de dernière année dans mon université et j'ai maintenant 12 serveurs Ubuntu sous le même domaine. Certains d'entre eux seront utilisés comme serveurs Web et l'autre comme serveur de base de données MySQL. Par conséquent, je souhaite implémenter un service de session basé sur MySQL pour permettre la synchronisation des données de session sur tous les serveurs Web.
Auparavant, j'essayais de programmer la session cross-serveur basée sur MySQL. Si srinathgs/mysqlstore offrent un moyen plus simple de faire la même chose, c'est formidable pour moi d'étudier et de simplifier mon travail.

Utilisez le CookieStore par défaut, et si tous les serveurs ont la même clé de signature,
et existent sur le même domaine, il fonctionnera tel quel.

Le dimanche 24 juillet 2016 à 22h48, Casper LI [email protected] a écrit :

gorilla/session semble parfait pour ma tâche. En fait, je veux utiliser Go sur mon
projet de dernière année dans mon université et maintenant j'ai 12 serveurs ubuntu sous
le même domaine. Certains d'entre eux seront utilisés comme serveurs Web et l'autre sera
utilisé comme serveur de base de données MySQL. Par conséquent, je souhaite mettre en place un
Service de session basé sur MySQL pour permettre la synchronisation des données de session dans tous les sites Web
les serveurs.
Auparavant, j'essayais de programmer la session cross-serveur basée sur MySQL. Si "
github.com/gorilla/sessions" fournit un moyen plus simple de faire la même chose, c'est
super pour moi d'étudier et de simplifier mon travail.

-
Vous recevez ceci parce que vous avez été affecté.

Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/gorilla/sessions/issues/87#issuecomment -234845955,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AABIcNfC7H8DrZq5NX1Tu7W_Vd1LM5BIks5qZE43gaJpZM4JTizF
.

Désolé, je veux savoir quels sont le CookieStore par défaut et la clé de signature ? CookieStore signifie gorilla/sessions package ?

Oui. Jetez un œil à http://www.gorillatoolkit.org/pkg/sessions -

  • something-very-secret est la clé de signature
  • sessions.NewCookieStore renvoie un *CookieStore , qui ne nécessite pas de base de données/état partagé entre vos serveurs.
import (
    "net/http"
    "github.com/gorilla/sessions"
)

var store = sessions.NewCookieStore([]byte("something-very-secret"))

func MyHandler(w http.ResponseWriter, r *http.Request) {
    // Get a session. We're ignoring the error resulted from decoding an
    // existing session: Get() always returns a session, even if empty.
    session, err := store.Get(r, "session-name")
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    // Set some session values.
    session.Values["foo"] = "bar"
    session.Values[42] = 43
    // Save it before we write to the response/return from the handler.
    session.Save(r, w)
}

J'ai lu le code. Quand je regarde

var store = sessions.NewCookieStore([]byte("something-very-secret")) 

Je me demande si la variable store est utilisée dans tous les gestionnaires tout au long du projet. Si c'est le cas, il semble que je doive l'envelopper dans un autre package et le faire exporter. C'est parce que j'ai séparé tous les différents gestionnaires dans différents packages en fonction de la page qu'ils servent (par exemple, index , projbrwsr , codeeditor ) et ces gestionnaires doivent appeler le même Store .
image

something-very-secret est dit être une clé secrète mais je n'ai aucune idée de ce que je devrais passer à la fonction NewCookieStore() .

Injectez store (sessions.Store) en tant que dépendance dans vos autres packages.

Le lundi 25 juillet 2016 à 8h57, Casper LI [email protected] a écrit :

J'ai lu le code. Quand je regarde

var store = sessions.NewCookieStore([]byte("quelque chose-très-secret"))

Je me demande si la variable store est utilisée dans tous les gestionnaires à travers
le projet. Si c'est le cas, il semble que je doive l'emballer dans un autre paquet et
le faire exporter. C'est parce que j'ai séparé tous les différents gestionnaires dans
différents packages en fonction de la page qu'ils servent (par exemple, index,
projbrwsr, codeeditor) et ces gestionnaires doivent appeler le même Store.
[image : image]
https://cloud.githubusercontent.com/assets/6957401/17107410/a34dcc50-52c1-11e6-92f7-a4227da60244.png

-
Vous recevez ceci parce que vous avez été affecté.

Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/gorilla/sessions/issues/87#issuecomment -234996994,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AABIcOHzeq8IabUoj-SZx_B-7er-PJf9ks5qZNzsgaJpZM4JTizF
.

quelque chose de très secret est dit être une clé secrète mais je n'ai aucune idée de ce que je devrais transmettre à la fonction NewCookieStore().

https://godoc.org/github.com/gorilla/sessions#NewCookieStore

Les clés sont définies par paires pour permettre la rotation des clés, mais le cas courant consiste à définir une seule clé d'authentification et éventuellement une clé de chiffrement.
La première clé d'une paire est utilisée pour l'authentification et la seconde pour le cryptage. La clé de cryptage peut être définie sur nil ou omise dans la dernière paire, mais la clé d'authentification est requise dans toutes les paires.

NewCookieStore prend une clé d'authentification/de signature et une clé de cryptage (facultative).

Désolé, je suis assez nouveau sur Go. Pourriez-vous en dire plus sur Inject store ou me donner un lien pour explication ? Merci.

@CasperHK Demandez aux constructeurs de vos packages d'accepter leurs dépendances - par exemple

  • NewProjectBrowser(store sessions.Store, debug bool) (*ProjectBrowser, error) { ... }
  • NewCodeEditor(store sessions.Store) (*CodeEditor, error) { ... }

En main.go

func main() {
    // Create a store, and then pass it (inject it) into your other packages via their constructors
    store  := sessions.NewCookieStore(key)
    ...
    ce, err := package.NewCodeEditor(store)
    ...
    pb, err := package.NewProjectBrowser(store)
    ...
}

Fermeture pour cause d'inactivité.

Cette page vous a été utile?
0 / 5 - 0 notes