为什么你需要在大猩猩 session 中保存一些东西?

Why did you need to save something in gorilla session?

我是大猩猩 session(以及一般的 cookie)的初学者,我一直在试验它。 在文档中他们有这个代码:

session, err := store.Get(r, "session-name")
if err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
    return
}

// 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 {
    http.Error(w, err.Error(), http.StatusInternalServerError)
    return
}

根据我对 session 的理解,您需要用户在成功登录后才能收到 session "token",然后将其存储到商店中。 似乎这一行 store.Get(r, "session-name") 就是这样做的,而实际上“session-name”将是成功通过身份验证的用户 ID。 这里的目标是能够在未来的请求中检索和比较 session 令牌。(对吗?)

我不明白的是保存的那些值是什么:

// Set some session values.
session.Values["foo"] = "bar"
session.Values[42] = 43

我们用它们做什么?是为了存储额外的数据,当 cookie 被发回给我们时,这些数据会被检索到吗?是否留在后端?或编码并添加到 cookie 中的方式与 JWT 在有效负载中编码额外数据的方式相同(例如用户的角色等)

在我看来,只有第一步是必要的,但我不确定其余步骤,特别是因为 store.Get() 没有参数应该生成 session,如 the doc example " // Get a session. Get() always returns a session, even if empty." id 这样我就可以将它保存在我的 database/redis/in 内存中而完全不使用其余部分。

我觉得我错过了什么。

store.Get方法使用request对象获取sessionid,然后从store中获取session数据,然后创建session对象

session.Values 使用地图保存会话数据。读写session.Values就是操作session数据。最后调用session.Save方法将新序列化的数据保存到store中