我的rails应用使用会话存储用户凭据以进行授权。尝试在Go代码中登录并执行一些操作(需要用户会话)。我应该在登录时检索用户会话并传递给下一个请求吗?我该怎么处理?
答案 0 :(得分:8)
Go的标准库不提供HTTP会话管理器。所以你必须自己写一个,或者用别人写的。
一些例子:
通常,HTTP会话通过服务器和客户端之间的cookie进行管理,因此,会话(会话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
}