问题描述
我将会话保存在Redis数据库中(而不是内存中,实际上是DB中)。
我想在会话中存储一些内容,以便能够跟踪用户会话并能够限制每个用户可以拥有的会话数量。
在签名时,它会检查他们是否具有有效的会话,否则将对用户进行身份验证,然后创建一个会话并向该会话中添加值。 他们退出后,它将删除会话。
键“ *”
"session_QPEOONJ25OG4HGWCN4Y556VGUN26V7IIASOYLGBVPZSPKO2B3P7FENYYDLPRWV2IBJK4RNANLCYANGMN7UUDG6DJ4NZG7XZBSFW3LWI"
func signIn(c echo.Context) error {
ctx := c.Request().Context()
collection := mg.Db.Collection("users")
// validation code removed for convenience
err = bcrypt.CompareHashAndPassword([]byte(existingUser.HashedPassword),[]byte(signInUser.Password))
if err != nil {
return c.String(http.StatusNotAcceptable,"Incorrect password")
}
store := redisSessionInstance.Store
session,err := store.Get(c.Request(),"session_")
if err != nil {
fmt.Println("Failed getting session: ",err)
}
// checks if session exists or is new one
if session.IsNew {
session.Values["id"] = existingUser.ID.String() // ID of user from mongodb
session.Values["role"] = existingUser.Role
// Save session
if err = session.Save(c.Request(),c.Response()); err != nil {
fmt.Println("Failed saving session: ",err)
}
}
return c.String(http.StatusAccepted,"Signed In!")
}
如您所见,我获得了用户ID和角色。
我希望能够限制每个用户随时可以打开的会话数量。 我还希望能够知道Redis Db中每个用户的会话,并能够删除每个用户的会话。 (基本上是一种将每个用户绑定到其会话的方法)
我将如何处理?
解决方法
您可以使用列表来存储用户的会话。您可以通过预先用LLEN <key>
检查长度来限制会话数。
您可以使用LRANGE <key> 0 -1