猿问

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

我是大猩猩会话(和一般饼干)的初学者,我一直在尝试它。在文档中,他们有以下代码:


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()没有参数应该生成一个会话,如文档示例中所述“//获取一个会话。Get() 总是返回一个会话,即使是空的。” id 所以我可以将它保存在我的数据库/redis/内存中,而根本不使用其余部分。


我觉得我错过了什么。


小怪兽爱吃肉
浏览 112回答 1
1回答

侃侃无极

store.Get 方法使用 request 对象获取 sessionid,然后从 store 中获取 session 数据,然后创建 session 对象。session.Values 使用映射来保存会话数据。读写 session.Values 是为了操作会话数据。最后调用 session.Save 方法将新序列化中的数据保存到存储中。
随时随地看视频慕课网APP

相关分类

Go
我要回答