Невозможно сохранить данные с помощью сеансов Gorilla при последующих запросах к серверу. - PullRequest
0 голосов
/ 21 марта 2019

Я прочитал все относящиеся к этому вопросы, но все еще не могу заставить его работать.

Я использую маршрутизатор Chi и сеансы Gorilla.

Сначала я запускаю store.Options:

var authKey = []byte("somesecret")
// Encryption Key
var encKey = []byte("someothersecrets")
var store = sessions.NewCookieStore(authKey, encKey)

func init() {
    fmt.Println("$$$%%$$%%%%%%")
    store.Options = &sessions.Options{
    Domain:   "localhost",
    Path:     "/",
    MaxAge:   3600 * 8, // 8 hours
    HttpOnly: true,
}

Затем, когда будет обработан первый обработчик маршрута, я сгенерирую новую переменную state и сохраню ее в сеансе:

session, err = store.Get(r, "my_cookie")
session.Values["state"] = newState
errSave := session.Save(r, w)

Это сохраняется без ошибок.Затем клиент выполняет некоторые действия и запускает другой обработчик маршрута, где я пытаюсь извлечь эту переменную state из сеанса:

session, err = store.Get(r, "my_cookie")
existingState := session.Values["state"]

Однако это существующее значение состояния всегда равно нулю, session.IsNew всегдаЗдесь также возвращается истина.

Мне удалось решить эту проблему, сделав session глобальной определенной переменной и не вызывая

 session, err = store.Get(r, "my_cookie") 

во втором обработчике, но это кажется неправильным подходом.Это кажется похоже, так как я вызываю store.get() с другим объектом запроса каждый раз, когда он создает новое хранилище, но это кажется полностью противоречащим цели этой библиотеки.Кто-нибудь может пролить свет на то, что мне здесь не хватает?

...