Sessions: Sessão Cross Web Server

Criado em 24 jul. 2016  ·  11Comentários  ·  Fonte: gorilla/sessions

É possível fazer uma sessão entre servidores usando gorila / sessões? Suponha que eu tenha vários servidores para servir um site. Se o usuário fizer login em um servidor, espero que ele também faça login em outro servidor.

question

Comentários muito úteis

@CasperHK Isso é o que você obtém por padrão com os cookies: contanto que os servidores façam parte do mesmo domínio (por exemplo, github.com ou * .github.com), o cookie será enviado pelo navegador.

Como alternativa, as sessões também oferecem suporte a armazenamentos do lado do servidor - todos os servidores precisam ser capazes de se conectar a esse armazenamento (seja Redis ou PostgreSQL, etc).

Todos 11 comentários

@CasperHK Isso é o que você obtém por padrão com os cookies: contanto que os servidores façam parte do mesmo domínio (por exemplo, github.com ou * .github.com), o cookie será enviado pelo navegador.

Como alternativa, as sessões também oferecem suporte a armazenamentos do lado do servidor - todos os servidores precisam ser capazes de se conectar a esse armazenamento (seja Redis ou PostgreSQL, etc).

gorilla/session parece ótimo para minha tarefa. Na verdade, eu quero usar Go no meu projeto de último ano na minha universidade e agora tenho 12 servidores ubuntu sob o mesmo domínio. Alguns deles serão usados ​​como servidores web e um será usado como um servidor de banco de dados MySQL. Portanto, desejo implementar um serviço de sessão baseado em MySQL para permitir a sincronização dos dados da sessão em todos os servidores da web.
Anteriormente, tentei programar a sessão de servidor cruzado baseada em MySQL. Se srinathgs/mysqlstore fornecem uma maneira mais fácil de fazer o mesmo, é ótimo para mim estudar e simplificar meu trabalho.

Use o CookieStore padrão e, se todos os servidores tiverem a mesma chave de assinatura,
e existir no mesmo domínio, ele funcionará como está.

No domingo, 24 de julho de 2016 às 22h48, Casper LI [email protected] escreveu:

gorila / sessão parece ótimo para minha tarefa. Na verdade, eu quero usar Go no meu
projeto de último ano na minha universidade e agora tenho 12 servidores ubuntu sob
o mesmo domínio. Alguns deles serão usados ​​como servidores web e um será
usado como um servidor de banco de dados MySQL. Portanto, quero implementar um
Serviço de sessão baseado em MySQL para permitir a sincronização dos dados da sessão em toda a web
servidores.
Anteriormente, tentei programar a sessão de servidor cruzado baseada em MySQL. Se "
github.com/gorilla/sessions "fornecem uma maneira mais fácil de fazer o mesmo, é
ótimo para eu estudar e simplificar meu trabalho.

-
Você está recebendo isto porque foi designado.

Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/gorilla/sessions/issues/87#issuecomment -234845955,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/AABIcNfC7H8DrZq5NX1Tu7W_Vd1LM5BIks5qZE43gaJpZM4JTizF
.

Desculpe, gostaria de perguntar qual é o CookieStore padrão e a chave de assinatura? CookieStore significa gorilla/sessions pacote?

sim. Dê uma olhada em http://www.gorillatoolkit.org/pkg/sessions -

  • something-very-secret é a chave de assinatura
  • sessions.NewCookieStore retorna um *CookieStore , que não requer um banco de dados / estado compartilhado entre seus 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)
}

Eu li o código. Quando eu olho para

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

Eu me pergunto se a variável store é usada em todos os manipuladores durante todo o projeto. Em caso afirmativo, parece que preciso embrulhá-lo em outro pacote e exportá-lo. Isso ocorre porque eu separei todos os manipuladores diferentes em pacotes diferentes de acordo com a página que eles estão servindo, (por exemplo, index , projbrwsr , codeeditor ) e esses manipuladores têm que chamar o mesmo Store .
image

something-very-secret é considerada uma chave secreta, mas não tenho nenhuma idéia do que devo passar para a função NewCookieStore() .

Injetar armazenamento (sessões.Armazenamento) como uma dependência em seus outros pacotes.

Na segunda-feira, 25 de julho de 2016 às 8:57 AM Casper LI [email protected] escreveu:

Eu li o código. Quando eu olho para

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

Eu me pergunto se a variável store é usada em todos os manipuladores ao longo de
o projeto. Em caso afirmativo, parece que preciso embrulhá-lo em outro pacote e
torná-lo exportado. Isso ocorre porque separei todos os diferentes manipuladores em
pacotes diferentes de acordo com a página que estão servindo, (por exemplo, índice,
projbrwsr, codeeditor) e esses manipuladores devem chamar para o mesmo Store.
[imagem: imagem]
https://cloud.githubusercontent.com/assets/6957401/17107410/a34dcc50-52c1-11e6-92f7-a4227da60244.png

-
Você está recebendo isto porque foi designado.

Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/gorilla/sessions/issues/87#issuecomment -234996994,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/AABIcOHzeq8IabUoj-SZx_B-7er-PJf9ks5qZNzsgaJpZM4JTizF
.

alguma coisa-muito-secreta é considerada uma chave secreta, mas não tenho nenhuma ideia do que devo passar para a função NewCookieStore ().

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

As chaves são definidas em pares para permitir a rotação de chaves, mas o caso comum é definir uma única chave de autenticação e, opcionalmente, uma chave de criptografia.
A primeira chave em um par é usada para autenticação e a segunda para criptografia. A chave de criptografia pode ser definida como nula ou omitida no último par, mas a chave de autenticação é necessária em todos os pares.

NewCookieStore usa uma chave de autenticação / assinatura e uma chave de criptografia (opcional).

Desculpe, sou muito novo para ir. Você poderia explicar mais sobre Inject store ou me dar um link para uma explicação? Obrigada.

@CasperHK Faça com que os construtores de seus pacotes aceitem suas dependências - por exemplo

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

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

Fechando por inatividade.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

cless picture cless  ·  23Comentários

marksalpeter picture marksalpeter  ·  17Comentários

elithrar picture elithrar  ·  25Comentários

elithrar picture elithrar  ·  22Comentários

danvonk picture danvonk  ·  9Comentários