Golang Gorilla会话Redis实现每个用户的最大会话量
我正在使用: 对于mongodb集合中的每个用户,他们都有一个唯一的userSessionID,我使用它可以知道每个用户的会话 我正试图弄清楚,在将userSessionID保存到redis数据库密钥/存储时,如何使用这个导入的库(使用gorilla会话)以某种方式将其添加或附加到会话令牌 在我的redis DB上,我可以通过执行以下操作查看所有会话:Golang Gorilla会话Redis实现每个用户的最大会话量,go,session,redis,Go,Session,Redis,我正在使用: 对于mongodb集合中的每个用户,他们都有一个唯一的userSessionID,我使用它可以知道每个用户的会话 我正试图弄清楚,在将userSessionID保存到redis数据库密钥/存储时,如何使用这个导入的库(使用gorilla会话)以某种方式将其添加或附加到会话令牌 在我的redis DB上,我可以通过执行以下操作查看所有会话: KEYS '*' 1) "session_UDPTLRXUXTJZMVB2AFWRNJHJQXBR27ZY5KZ7Z3KSIXL6E
KEYS '*'
1) "session_UDPTLRXUXTJZMVB2AFWRNJHJQXBR27ZY5KZ7Z3KSIXL6ETQ4KXEIBJA4WEVEQID2WSAFQFKLFOHWYT42PIHUMRNW5RWSS76Z72QS4SI"
当用户登录并通过身份验证时:
store := redisSessionInstance.Store
session, err := store.Get(c.Request(), "session_")
if err != nil {
return c.String(http.StatusNotAcceptable, "failed getting session")
}
// checks if session exists or is new one
// only need to set data to its values if it's new
if session.IsNew {
// TODO check here if too many sessions exist
var userSessionID, err = primitive.ObjectIDFromHex(existingUser.UserSessionID.Hex())
if err != nil {
fmt.Println("Error getting user session ID")
return c.String(http.StatusNotAcceptable, "error getting user session id")
}
// This is used when calling endpoints to get specific user data
session.Values["userSessionID"] = userSessionID.Hex()
session.IsNew = false
// TODO somehow save the userSessionID to redis along with sessionID so that we can determine which user owns which sessions.
// Save session
if err = session.Save(c.Request(), c.Response()); err != nil {
fmt.Println("failed saving session: ", err)
return c.String(http.StatusNotAcceptable, "failed saving session")
}
这还允许我删除用户的所有会话,甚至删除除当前活动会话之外的所有其他会话