package webServer import ( "sync" "time" ) var ( //已经登录的用户 loginUserMap = make(map[int64]*TokenInfo) //锁 lock sync.RWMutex ) type TokenInfo struct { //管理员id Id int64 //管理员账号 Account string //过期时间 ExpireTime time.Time } // AddLoginUserToken 添加登录用户及其令牌信息到缓存中 // 参数: // // token: 用户的登录令牌 // tokenInfo: 令牌的详细信息,包括过期时间等 func AddLoginUserToken(token int64, tokenInfo *TokenInfo) { //添加锁防止并发 lock.Lock() defer lock.Unlock() // 默认24小时过期 tokenInfo.ExpireTime = time.Now().Add(time.Hour * 24) //移除旧的令牌 for tokenKey, tokenInfoValue := range loginUserMap { if tokenInfo.Id == tokenInfoValue.Id { delete(loginUserMap, tokenKey) } } // 将令牌与用户信息添加到全局的登录用户映射中 loginUserMap[token] = tokenInfo } // CheckToken 检查令牌是否有效 // 参数: // // token: 需要检查的令牌字符串 // // 返回值: // // bool: 表示令牌是否有效的布尔值,true表示有效,false表示无效 func CheckToken(token int64) bool { //添加锁防止并发 lock.Lock() defer lock.Unlock() // 获取当前时间 now := time.Now() // 获取令牌对应的用户信息 tokenInfo, ok := loginUserMap[token] if !ok { // 如果没有找到对应的用户信息,则令牌无效 return false } // 获取令牌过期时间 expireTime := tokenInfo.ExpireTime // 如果令牌过期时间早于当前时间,则令牌无效 if expireTime.Before(now) { //移除令牌 delete(loginUserMap, token) return false } //如果生效的话,则更新过期时间 tokenInfo.ExpireTime = now.Add(time.Hour * 24) return true }