我已经阅读了所有与此相关的问题,但仍然无法使其正常工作。
我正在使用Chi路由器和Gorilla会话。
首先,我初始化store.Options
:
var authKey = []byte("somesecret")
// Encryption Key
var encKey = []byte("someothersecrets")
var store = sessions.NewCookieStore(authKey, encKey)
func init() {
fmt.Println("$$$%%$$%%%%%%")
store.Options = &sessions.Options{
Domain: "localhost",
Path: "/",
MaxAge: 3600 * 8, // 8 hours
HttpOnly: true,
}
然后,当第一个路由处理程序被点击时,我生成一个新的state
变量并将其保存到会话中:
session, err = store.Get(r, "my_cookie")
session.Values["state"] = newState
errSave := session.Save(r, w)
此保存无误。接下来,客户端执行一些操作,并击中另一个路由处理程序,在该路由处理程序中,我尝试从会话中获取该state
变量:
session, err = store.Get(r, "my_cookie")
existingState := session.Values["state"]
但是,此现有状态值始终为nil,session.IsNew
在此也始终返回true。
我已经设法通过使session
成为全局定义的变量并且不重新调用
session, err = store.Get(r, "my_cookie")
在第二个处理程序中,但这似乎是错误的方法。好像是 ,因为每次创建新商店时,我都会使用不同的请求对象调用store.get()
,但这似乎与该库的目的完全矛盾。谁能告诉我我在这里想念的东西吗?