在golang中获取会话值

Ayd*_*kov 8 session http go ruby-on-rails-4

我的rails应用程序使用会话存储用户凭据以进行授权.尝试在Go代码中登录并执行一些操作(需要用户会话).我应该在登录时检索用户会话并传递给下一个请求吗?我该怎么处理?

icz*_*cza 9

Go的标准库不提供HTTP会话管理器.所以你必须自己写一个,或者用别人写的.

一些例子:

通常,HTTP会话通过服务器和客户端之间的cookie进行管理,因此,会话(会话ID)可以直接从request(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
    }
}
Run Code Online (Sandbox Code Playgroud)

使用大猩猩会话,它是类似的:

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
}
Run Code Online (Sandbox Code Playgroud)