会话最佳实践(gorilla/sessions)
在golang开始使用会话之前,我需要回答一些问题 会话示例 问题1: 是否可以在同一个域中添加多个具有不同名称的会话会话最佳实践(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”] 问
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)
}