2016-09-15 2 views
6

내 레일 앱은 권한 부여를 위해 사용자 자격 증명을 저장하기 위해 세션을 사용합니다. Go 코드의 로그인 및 일부 작업 (사용자 세션이 필요함)을 시도하고 있습니다. 로그인 할 때 사용자 세션을 검색하고 다음 요청으로 전달해야합니까? 어떻게 처리 할 수 ​​있습니까?골란에서 세션 값 가져 오기

답변

7

Go의 표준 라이브러리는 HTTP 세션 관리자를 제공하지 않습니다. 그래서 당신은 당신 자신을 써야하거나, 다른 사람들이 쓴 것을 사용하십시오.

몇 가지 예 : - :

  • https://github.com/gorilla/sessions합니다 (Gorilla web toolkit의 일부)
  • 는 일반적으로 세션을 관리하는 HTTP

    • https://github.com/icza/session는 (나는 저자 해요 공개) 구글 앱 엔진을 지원합니다 서버와 클라이언트 사이의 쿠키를 통해 세션 (세션 ID)을 요청 (http.Request)에서 직접 얻을 수 있습니다. Request.Cookie().

      "요청 체인"을 통해 세션을 "전달"할 필요가 없다고 말하면 모든 처리기는 http.Request을 가지고 액세스 할 수 있습니다. github.com/icza/session를 사용하여 예를 들어

      가 다음과 같이 수행 할 수 있습니다

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

      Gorilla sessions를 사용하면, 유사 :

      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 
      }