为什么需要在大猩猩会话中保存某些内容?

问题描述 投票:0回答:1

我是大猩猩课程的初学者(通常是饼干),我一直在尝试。在文档中,他们有以下代码:

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
}

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

我不理解的是保存的那些值是什么:

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

我们将它们用于什么?是否存储将cookie发送回给我们时检索的额外数据?留在后端存储吗?或以与JWT编码有效负载中额外数据相同的方式进行编码并添加到Cookie(例如,用户角色等。)

[在我看来,只有第一步是必要的,但是我不确定其余的事情,尤其是因为store.Get()不带参数应该按照the doc example " // Get a session. Get() always returns a session, even if empty." id中的说明生成一个会话,因此我可以将其保存在数据库/ redis /在内存中,根本不使用其余的。

我觉得我缺少什么。

go session session-cookies session-variables gorilla
1个回答
0
投票

store.Get方法使用请求对象获取会话ID,然后从商店获取会话数据,然后创建会话对象。

session.Values使用映射来保存会话数据。读写session.Values是用来操纵会话数据。最后,调用session.Save方法将数据从新的序列化保存到存储中。

© www.soinside.com 2019 - 2024. All rights reserved.