为什么你需要在大猩猩 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中
我是大猩猩 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中