无法在后续对服务器的请求中使用大猩猩会话持久化数据

时间:2019-03-21 19:30:23

标签: session go gorilla

我已经阅读了所有与此相关的问题,但仍然无法使其正常工作。

我正在使用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(),但这似乎与该库的目的完全矛盾。谁能告诉我我在这里想念的东西吗?

0 个答案:

没有答案