Путаница с пакетом сеанса Gorilla

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

Действует ли Gorilla аналогично $_SESSION['name'] или аналогично $_COOKIE['name'] из PHP?

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


person freetoplay    schedule 11.08.2015    source источник


Ответы (1)


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

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

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

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

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

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

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

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

e.g.

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

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

person elithrar    schedule 12.08.2015