Sessions: Sesión de servidor web cruzado

Creado en 24 jul. 2016  ·  11Comentarios  ·  Fuente: gorilla/sessions

¿Es posible hacer una sesión entre servidores usando gorilla / sessions? Suponga que tengo varios servidores para servir un sitio web. Si el usuario inicia sesión en un servidor, espero que también inicie sesión en otro servidor.

question

Comentario más útil

@CasperHK Eso es lo que se obtiene de forma predeterminada con las cookies: siempre que los servidores formen parte del mismo dominio (por ejemplo, github.com o * .github.com), el navegador enviará la cookie.

Alternativamente, las sesiones también son compatibles con las tiendas del lado del servidor : todos los servidores deberían poder conectarse a esa tienda (ya sea Redis o PostgreSQL, etc.).

Todos 11 comentarios

@CasperHK Eso es lo que se obtiene de forma predeterminada con las cookies: siempre que los servidores formen parte del mismo dominio (por ejemplo, github.com o * .github.com), el navegador enviará la cookie.

Alternativamente, las sesiones también son compatibles con las tiendas del lado del servidor : todos los servidores deberían poder conectarse a esa tienda (ya sea Redis o PostgreSQL, etc.).

gorilla/session parece genial para mi tarea. En realidad, quiero usar Go en mi proyecto de último año en mi universidad y ahora tengo 12 servidores ubuntu bajo el mismo dominio. Algunos de ellos se utilizarán como servidores web y uno se utilizará como servidor de base de datos MySQL. Por lo tanto, quiero implementar un servicio de sesión basado en MySQL para permitir la sincronización de datos de sesión en todos los servidores web.
Anteriormente, intenté programar la sesión de servidor cruzado basada en MySQL. Si srinathgs/mysqlstore proporciona una manera más fácil de hacer lo mismo, es genial para mí estudiar y simplificar mi trabajo.

Utilice el CookieStore predeterminado y, si todos los servidores tienen la misma clave de firma,
y existir en el mismo dominio, funcionará como está.

El domingo, 24 de julio de 2016 a las 10:48 p.m., Casper LI [email protected] escribió:

gorilla / session parece genial para mi tarea. De hecho, quiero usar Go en mi
proyecto de último año en mi universidad y ahora tengo 12 servidores ubuntu bajo
el mismo dominio. Algunos de ellos se utilizarán como servidores web y uno será
utilizado como servidor de base de datos MySQL. Por lo tanto, quiero implementar un
Servicio de sesión basado en MySQL para permitir la sincronización de datos de sesión en todos los sitios web.
servidores.
Anteriormente, intenté programar la sesión de servidor cruzado basada en MySQL. Si "
github.com/gorilla/sessions "proporciona una forma más sencilla de hacer lo mismo, es
genial para mí estudiar y simplificar mi trabajo.

-
Está recibiendo esto porque fue asignado.

Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/gorilla/sessions/issues/87#issuecomment -234845955,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AABIcNfC7H8DrZq5NX1Tu7W_Vd1LM5BIks5qZE43gaJpZM4JTizF
.

Lo siento, quiero preguntar cuáles son la CookieStore predeterminada y la clave de firma. CookieStore significa gorilla/sessions paquete?

sí. Eche un vistazo a http://www.gorillatoolkit.org/pkg/sessions -

  • something-very-secret es la clave de firma
  • sessions.NewCookieStore devuelve un *CookieStore , que no requiere una base de datos / estado compartido entre sus servidores.
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)
}

He leído el código. Cuando miro

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

Me pregunto si la variable store se usa en todos los controladores a lo largo del proyecto. Si es así, parece que necesito envolverlo en otro paquete y exportarlo. Esto se debe a que separé todos los manejadores diferentes en paquetes diferentes según la página que están sirviendo (por ejemplo, index , projbrwsr , codeeditor ) y esos manejadores tienen que llamar al mismo Store .
image

Se dice que something-very-secret es una clave secreta, pero no tengo ni idea de qué debo pasar a la función NewCookieStore() .

Inyecte store (sessions.Store) como una dependencia en sus otros paquetes.

El lunes, 25 de julio de 2016 a las 8:57 a.m., Casper LI [email protected] escribió:

He leído el código. Cuando miro

var store = sessions.NewCookieStore ([] byte ("algo-muy-secreto"))

Me pregunto si la variable de tienda se usa en todos los controladores a lo largo de
el proyecto. Si es así, parece que necesito envolverlo en otro paquete y
Hágalo exportado. Esto se debe a que separé todos los controladores diferentes en
diferentes paquetes según la página a la que sirven (por ejemplo, índice,
projbrwsr, codeeditor) y esos manejadores deben llamar a la misma tienda.
[imagen: imagen]
https://cloud.githubusercontent.com/assets/6957401/17107410/a34dcc50-52c1-11e6-92f7-a4227da60244.png

-
Está recibiendo esto porque fue asignado.

Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/gorilla/sessions/issues/87#issuecomment -234996994,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AABIcOHzeq8IabUoj-SZx_B-7er-PJf9ks5qZNzsgaJpZM4JTizF
.

Se dice que algo-muy-secreto es una clave secreta, pero no tengo ni idea de qué debo pasar a la función NewCookieStore ().

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

Las claves se definen en pares para permitir la rotación de claves, pero el caso común es establecer una clave de autenticación única y, opcionalmente, una clave de cifrado.
La primera clave de un par se utiliza para la autenticación y la segunda para el cifrado. La clave de cifrado se puede establecer en cero u omitirse en el último par, pero la clave de autenticación es necesaria en todos los pares.

NewCookieStore toma una clave de autenticación / firma y una clave de cifrado (opcional).

Lo siento, soy bastante nuevo en Go. ¿Podrías explicarme más sobre Inject store o darme un enlace para una explicación? Gracias.

@CasperHK Haga que los constructores de sus paquetes acepten sus dependencias, por ejemplo

  • 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)
    ...
}

Cierre por inactividad.

¿Fue útil esta página
0 / 5 - 0 calificaciones