Путаница с пакетом гориллы

Исходя из фона PHP, я немного запутался в пакете сессий Gorilla.

Горилла действует подобно $_SESSION['name'] или это действует как $_COOKIE['name'] из PHP?

Я пытаюсь использовать оба способа для создания пользовательской сессии для моего веб-приложения Go, но я не уверен, что сессии Gorilla будут хорошим пакетом для использования. Я хочу, чтобы пользователи, которые не нажимали кнопку "запомнить меня" в форме входа в систему, удаляли свой сеанс после закрытия браузера, в то время как у всех остальных был файл cookie, связанный с ними. Так смогут ли сеансы Gorilla справиться с обоими сценариями, или я должен использовать что-то еще в этом случае?

1 ответ

Решение

Это полностью зависит от того, какой сервер хранения вы используете.

Пакет gorilla / session имеет встроенные хранилища файлов cookie и файловой системы. Там нет хранилища на основе памяти, что примерно то, что PHP $_SESSION является.

Моя рекомендация:

  • Используйте встроенный магазин куки, который использует подписанные куки. Он хорошо подходит для большинства целей и является самым простым в реализации.
  • Если вам нужны сеансы на стороне сервера (т. Е. Хранить большие значения в сеансе), выберите из доступных реализаций - Redis, BoltDB, mySQL, Postgres и т. Д.

У меня есть опыт из первых рук с магазином Redis, который был отличным. BoltDB (хранилище ключей на основе файлов) и Postgres также являются надежными, если вы предпочитаете их.

Я хочу, чтобы пользователи, которые не нажимали кнопку "запомнить меня" в форме входа в систему, удаляли свой сеанс после закрытия браузера, в то время как у всех остальных был файл cookie, связанный с ними. Так смогут ли сеансы Gorilla справиться с обоими сценариями, или я должен использовать что-то еще в этом случае?

Обратите внимание, что для всех реализаций требуется "cookie" - это только то, является ли cookie автономным хранилищем или содержит ли он идентификатор, ссылающийся на строку / значение в внутреннем хранилище.

Вы можете установить "сеансовые куки" (т.е. сохраняться только в течение сеанса вкладки / браузера), установив session.Options.MaxAge = 0 согласно этой части документации гориллы / сессий.

например

func MyHandler(w http.ResponseWriter, r *http.Request) {
    session, err := store.Get(r, "session-name")
    if err != nil {
        http.Error(w, err.Error(), 500)
        return
    }

    // Add your logic to check the r.FormValue for your remember_me checkbox.

    // Temporary session
    session.Options.MaxAge = 0

    // Set some session values.
    session.Values["user"] = someUser
    // Save it before we write to the response/return from the handler.
    session.Save(r, w)
}

Надеюсь, это поможет.

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