golang martini session. Не устанавливайте никаких значений

С этим не так много контекста, потому что это действительно ситуация, когда что-то должно работать, но это не так.

Я использую мартини фреймворк. В одном обработчике я использую это:

session.Set("deployed", "true")
r.Redirect("/myOtherURL", http.StatusSeeOther)

При этом "сессия" - это сеанс. Объект сеанса, передаваемый обработчику. В обработчике, который загружает myOtherURL, я использую session.Get, но ничего не возвращается. Я распечатал все содержимое сеанса, а "развернутый" нет.

Что может быть причиной этой проблемы? Что я мог упустить? Я бы дал больше контекста, если бы мог, но на самом деле все так просто.

1 ответ

Решение

Просто чтобы расширить мой комментарий / помочь другим в будущем:

  • Когда вы устанавливаете куки без явного Path значение, cookie принимает текущий путь.
  • Cookies отправляются только по этому пути и пути ниже - не выше - например,

    1. Набор cookie для /modules когда вы неявно установите его в первый раз с помощью session.Set(val, key)
    2. Cookie отправлено на /modules, /modules/all а также /modules/detail/12
    3. Cookie НЕ отправляется для /about или же /

Это можно исправить, явно указав путь:

var store = sessions.NewCookieStore([]byte("secret123"))

func main() {
    store.Options.Path = "/"
    ...
}

Имейте в виду, что вы можете не захотеть отправлять куки для всех маршрутов (вот что / будет делать) - так что используйте суждение.

Другие вопросы по тегам