我在一个请求上设置会话并在另一个页面请求上获取它们时遇到问题。
我正在使用 mysqlstore 包,该包是在自述文件中“存储实现”部分下的大猩猩会话 github 页面上推荐的。
https://github.com/srinathgs/mysqlstore
我设置了一个简单的请求来测试它,但它不起作用。这是代码:
家庭控制器
func (this *HomeController) SetCookie(ctx types.AppContext) web.HandlerType {
return func(c web.C, w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/plain")
fmt.Printf("%v\n\n", r)
ctx.SetCookies(r, w)
}
}
func (this *HomeController) GetCookie(ctx types.AppContext) web.HandlerType {
return func(c web.C, w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/plain")
fmt.Printf("%v\n\n", r)
ctx.GetCookies(r)
}
}
类型.AppContext
func (this *AppContext) SetCookies(r *http.Request, w http.ResponseWriter) {
fmt.Println("Setting cookies")
session, _ := this.store.Get(r, "session-name")
// Set some session values.
session.Values["foo"] = "bar"
session.Values[42] = 43
// Save it before we write to the response/return from the handler.
err := session.Save(r, w)
if err != nil {
fmt.Println("Problem Saving session data")
}
}
func (this *AppContext) GetCookies(r *http.Request) {
session, _ := this.store.Get(r, "session-name")
fmt.Println("Getting cookies")
// get some session values
for k, v := range session.Values {
fmt.Println("Key:", k)
fmt.Println("Value:", v)
}
}
main.go
ctx.SetStore("sessions", "/", 3600, []byte("somesecret"))
....
goji.Get("/set-cookie", homeCtrl.SetCookie(ctx))
goji.Get("/get-cookie", homeCtrl.GetCookie(ctx))
当我访问这两个页面时,我没有发现任何错误,并且可以在数据库中看到一个会话已保存。但是,当我尝试检索保存的 cookie 时, session.Values 映射为空。
我一直在看这个,无法弄清楚为什么它不起作用。这很简单,我可以做到,根据示例,这应该可以工作,但没有。我的代码中是否缺少某些内容以使其正常工作?
相关分类