Я прочитал все относящиеся к этому вопросы, но все еще не могу заставить его работать.
Я использую маршрутизатор 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()
с другим объектом запроса каждый раз, когда он создает новое хранилище, но это кажется полностью противоречащим цели этой библиотеки.Кто-нибудь может пролить свет на то, что мне здесь не хватает?