使用大猩猩会话时,我看到的每个示例都执行以下一些变体:
var store = sessions.NewCookieStore([]byte(os.Getenv("SESSION_KEY")))
func MyHandler(w http.ResponseWriter, r *http.Request) {
// Get a session. We're ignoring the error resulted from decoding an
// existing session: Get() always returns a session, even if empty.
session, _ := store.Get(r, "session-name")
// 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, _ := store.Get(r, "session-name")
为了验证这一点,我有2个隐身浏览器创建一个会话,其中用户的ID作为会话的值映射中的值。两个浏览器都返回了创建会话的最后一个用户的值。这对我来说都是有道理的,因为我们对所有内容都使用相同的会话名称。
我的问题是以下若要为每个经过身份验证的用户获取会话,我是否需要自己动态设置会话名称(可能包含来自经过身份验证的用户本身的一些信息)?如果是这样,当用户下次访问站点并且我需要再次从会话存储中检索信息时,我将如何检索该信息?
还是我完全以错误的方式思考会议?这是我第一次尝试用会话来创造一些东西,所以我有一种强烈的感觉,我错过了一些基本概念。
HUWWW
POPMUISE
相关分类