Sessions: Межсетевой сеанс сервера

Созданный на 24 июл. 2016  ·  11Комментарии  ·  Источник: gorilla/sessions

Можно ли сделать кросс-серверную сессию с помощью gorilla / sessions? Предположим, у меня есть несколько серверов для обслуживания одного веб-сайта. Если пользователь входит в систему на одном сервере, я ожидаю, что он также войдет в систему на другом сервере.

question

Самый полезный комментарий

@CasperHK Это то, что вы получаете по умолчанию с файлами cookie: если все серверы являются частью одного домена (например, github.com или * .github.com), cookie будет отправлен браузером.

В качестве альтернативы сеансы также поддерживают хранилища на стороне сервера - все серверы должны иметь возможность подключаться к этому хранилищу (будь то Redis, PostgreSQL и т. Д.).

Все 11 Комментарий

@CasperHK Это то, что вы получаете по умолчанию с файлами cookie: если все серверы являются частью одного домена (например, github.com или * .github.com), cookie будет отправлен браузером.

В качестве альтернативы сеансы также поддерживают хранилища на стороне сервера - все серверы должны иметь возможность подключаться к этому хранилищу (будь то Redis, PostgreSQL и т. Д.).

gorilla/session отлично подходит для моей задачи. На самом деле, я хочу использовать Go в своем проекте последнего года обучения в университете, и теперь у меня есть 12 серверов ubuntu в одном домене. Некоторые из них будут использоваться как веб-серверы, а один - как сервер базы данных MySQL. Поэтому я хочу реализовать службу сеансов на основе MySQL, чтобы разрешить синхронизацию данных сеанса на всех веб-серверах.
Раньше я пытался запрограммировать кросс-серверный сеанс на базе MySQL. Если srinathgs/mysqlstore предоставляет более простой способ сделать то же самое, для меня будет здорово изучить и упростить свою работу.

Используйте CookieStore по умолчанию, и если все серверы имеют одинаковый ключ подписи,
и существовать в том же домене, он будет работать как есть.

Вс, 24 июля 2016 г., в 22:48 Casper LI [email protected] написал:

gorilla / session отлично подходит для моей задачи. На самом деле я хочу использовать Go на моем
последний год в моем университете, и теперь у меня есть 12 серверов Ubuntu под
тот же домен. Некоторые из них будут использоваться в качестве веб-серверов, а один будет
используется как сервер базы данных MySQL. Поэтому я хочу реализовать
Служба сеансов на основе MySQL, позволяющая синхронизировать данные сеанса во всей сети
серверы.
Раньше я пытался запрограммировать кросс-серверный сеанс на базе MySQL. Если "
github.com/gorilla/sessions "предоставляет более простой способ сделать то же самое, это
отлично подходит для изучения и упрощения моей работы.

-
Вы получаете это, потому что вас назначили.

Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/gorilla/sessions/issues/87#issuecomment -234845955,
или отключить поток
https://github.com/notifications/unsubscribe-auth/AABIcNfC7H8DrZq5NX1Tu7W_Vd1LM5BIks5qZE43gaJpZM4JTizF
.

Извините, я хочу спросить, что такое CookieStore по умолчанию и ключ подписи? CookieStore означает пакет gorilla/sessions ?

да. Взгляните на http://www.gorillatoolkit.org/pkg/sessions -

  • something-very-secret - ключ подписи
  • sessions.NewCookieStore возвращает *CookieStore , что не требует наличия базы данных / общего состояния между вашими серверами.
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)
}

Я прочитал код. Когда я смотрю на

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

Интересно, используется ли переменная store во всех обработчиках проекта. Если это так, мне кажется, что мне нужно обернуть его в другой пакет и экспортировать. Это связано с тем, что я разделил все разные обработчики в разных пакетах в зависимости от того, какую страницу они обслуживают (например, index , projbrwsr , codeeditor ), и эти обработчики должны вызывать тот же Store .
image

something-very-secret считается секретным ключом, но я понятия не имею, что мне передать функции NewCookieStore() .

Внедрить store (sessions.Store) как зависимость в другие ваши пакеты.

В понедельник, 25 июля 2016 г., в 8:57 Casper LI [email protected] написал:

Я прочитал код. Когда я смотрю на

var store = sessions.NewCookieStore ([] byte ("что-то очень-секретное"))

Интересно, используется ли переменная store во всех обработчиках
проект. Если да, то мне кажется, что мне нужно обернуть его в другой пакет и
сделать его экспортированным. Это потому, что я разделил все разные обработчики в
разные пакеты в зависимости от того, какую страницу они обслуживают (например, index,
projbrwsr, codeeditor) и эти обработчики должны вызывать один и тот же Store.
[image: image]
https://cloud.githubusercontent.com/assets/6957401/17107410/a34dcc50-52c1-11e6-92f7-a4227da60244.png

-
Вы получаете это, потому что вас назначили.

Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/gorilla/sessions/issues/87#issuecomment -234996994,
или отключить поток
https://github.com/notifications/unsubscribe-auth/AABIcOHzeq8IabUoj-SZx_B-7er-PJf9ks5qZNzsgaJpZM4JTizF
.

что-то-очень-секретное называется секретным ключом, но я понятия не имею, что мне передать функции NewCookieStore ().

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

Ключи определяются парами, чтобы разрешить ротацию ключей, но обычно задают один ключ аутентификации и, при необходимости, ключ шифрования.
Первый ключ в паре используется для аутентификации, а второй - для шифрования. Ключ шифрования может быть равен нулю или опущен в последней паре, но ключ аутентификации требуется во всех парах.

NewCookieStore принимает ключ аутентификации / подписи и (необязательный) ключ шифрования.

Извините, я новичок в Go. Не могли бы вы подробнее рассказать о Inject store или дать мне ссылку для объяснения? Спасибо.

@CasperHK Заставьте конструкторы ваших пакетов принять свои зависимости - например,

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

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

Закрытие из-за бездействия.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги