2016-09-15 28 views
6

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

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:

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 
}