Aplikacja Moja szyna używa sesji do przechowywania poświadczeń użytkownika do autoryzacji. Próbuję się zalogować i wykonać pewne czynności (wymagające sesji użytkownika) w kodzie Go. Czy powinienem pobrać sesję użytkownika podczas logowania i przejść do następnego żądania? Jak mogę sobie z tym poradzić?Uzyskaj wartości sesji w golang
6
A
Odpowiedz
7
Go standardowa biblioteka nie udostępnia menedżera sesji HTTP. Więc musisz napisać samemu, lub użyć napisanego przez innych.
Kilka przykładów:
- https://github.com/icza/session - obejmuje Google App Wspornik silnika (ujawnienie: Jestem autor)
- https://github.com/gorilla/sessions (część Gorilla web toolkit)
Zazwyczaj HTTP sesje są zarządzane za pośrednictwem plików cookie między serwerem a klientem, i jako taki sesję (identyfikator sesji) można uzyskać bezpośrednio z żądania (http.Request
), np. z Request.Cookie()
.
W związku z tym, że nie jest konieczne "przekazywanie" sesji przez "łańcuch żądań", każdy program obsługi może uzyskać do niej dostęp, mając tylko numer http.Request
.
na przykład stosując github.com/icza/session
można to zrobić tak:
func MyHandler(w http.ResponseWriter, r *http.Request) {
sess := session.Get(r)
if sess == nil {
// No session (yet)
} else {
// We have a session, use it
}
}
Korzystanie Gorilla sessions, jest podobna:
var store = sessions.NewCookieStore([]byte("something-very-secret"))
func MyHandler(w http.ResponseWriter, r *http.Request) {
session, err := store.Get(r, "session-name")
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
// Use session
}