Путаница с пакетом гориллы
Исходя из фона 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)
}
Надеюсь, это поможет.