会话最佳实践(gorilla/sessions)

会话最佳实践(gorilla/sessions),session,go,Session,Go,在golang开始使用会话之前,我需要回答一些问题 会话示例 问题1: 是否可以在同一个域中添加多个具有不同名称的会话 session1, _ := store.Get(r, "session-name-1") session2, _ := store.Get(r, "session-name-2") 何时需要在同一域上进行多个会话 问题2: 从会话中获取变量的最佳实践是什么? my_session_var=session.Values[“foo”] 问

在golang开始使用会话之前,我需要回答一些问题

会话示例 问题1: 是否可以在同一个域中添加多个具有不同名称的会话

session1, _ := store.Get(r, "session-name-1")
session2, _ := store.Get(r, "session-name-2")
何时需要在同一域上进行多个会话

问题2: 从会话中获取变量的最佳实践是什么? my_session_var=session.Values[“foo”]

问题3: 如何检查会话是否正确保存?如果访问相同的
map
来设置和获取变量

更新 错误

文章“”()显示了定义会话的位置和时间的示例。
而不是在
处理程序
本身中执行,并且在定义其他处理程序时必须复制大量代码

使用,您可以定义所需的
处理程序

type handler func(w http.ResponseWriter, r *http.Request, db *mgo.Database)
(在您的情况下,它将是gorilla会话,而不是mgo会话或数据库)

可以负责会话的创建(这里是mgo会话,但是对于其他框架会话的想法是相同的)

您可以确保此函数类型(“
handler
”)尊重
ServeHTTP()
函数,注意:

  • 会话管理(克隆/关闭)
  • 调用实际的处理程序(其参数可能不止
    w
    r

然后您可以定义实际的
处理程序
(同样,使用多于
w
r
):

您可以在服务器中使用该处理程序:

func main() {
    mux := http.NewServeMux()
    mux.Handle("/", handler(myHandler))
    http.ListenAndServe(":8080", mux)
}
这样做的目的是将
main()
中的“管道”限制在最低限度,同时使
处理程序具有更多参数(包括您的会话)。
这允许您使用不同的
处理程序
,只需很少的管道,保持
main()
仅用于不同路径的声明(而不用于会话和处理程序的初始化)



2019年更新:在另一个相关上下文中,另请参见“

更新了我的问题。”。。发生错误时compiling@clarkk这最好作为一个单独的问题。
# command-line-arguments
.\mux.go:101: cannot convert Handler_404 (type func(http.ResponseWriter, *http.Request, *sessions.Session)) to type http.HandlerFunc
type handler func(w http.ResponseWriter, r *http.Request, db *mgo.Database)
func init() {
    session, err = mgo.Dial("localhost")

    if err != nil {
        log.Println(err)
    }
}
func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    s := session.Clone()
    defer s.Close()

    h(w, r, s.DB("example"))
}
func myHandler(w http.ResponseWriter, r *http.Request, db *mgo.Database) {
    var users []user

    db.C("users").Find(nil).All(&users)

    for _, user := range users {
        fmt.Fprintf(w, "%s is %d years old", user.Name, user.Age)
    }
}
func main() {
    mux := http.NewServeMux()
    mux.Handle("/", handler(myHandler))
    http.ListenAndServe(":8080", mux)
}