Golang Gorilla会话Redis实现每个用户的最大会话量

Golang Gorilla会话Redis实现每个用户的最大会话量,go,session,redis,Go,Session,Redis,我正在使用: 对于mongodb集合中的每个用户,他们都有一个唯一的userSessionID,我使用它可以知道每个用户的会话 我正试图弄清楚,在将userSessionID保存到redis数据库密钥/存储时,如何使用这个导入的库(使用gorilla会话)以某种方式将其添加或附加到会话令牌 在我的redis DB上,我可以通过执行以下操作查看所有会话: KEYS '*' 1) "session_UDPTLRXUXTJZMVB2AFWRNJHJQXBR27ZY5KZ7Z3KSIXL6E

我正在使用:

对于mongodb集合中的每个用户,他们都有一个唯一的userSessionID,我使用它可以知道每个用户的会话

我正试图弄清楚,在将userSessionID保存到redis数据库密钥/存储时,如何使用这个导入的库(使用gorilla会话)以某种方式将其添加或附加到会话令牌

在我的redis DB上,我可以通过执行以下操作查看所有会话:

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")
    }
这还允许我删除用户的所有会话,甚至删除除当前活动会话之外的所有其他会话