diff --git a/server/admin/api_user.go b/server/admin/api_user.go index 516d3ae..f58efe9 100644 --- a/server/admin/api_user.go +++ b/server/admin/api_user.go @@ -107,7 +107,8 @@ func UserSet(w http.ResponseWriter, r *http.Request) { return } } - + //修改用户资料后执行过期用户检测 + sessdata.CloseUserLimittimeSession() RespSucess(w, nil) } diff --git a/server/dbdata/db_orm.go b/server/dbdata/db_orm.go index 728d820..887a5e8 100644 --- a/server/dbdata/db_orm.go +++ b/server/dbdata/db_orm.go @@ -67,11 +67,11 @@ func CheckUserlimittime() []interface{} { //初始化xorm时区 xdb.DatabaseTZ = time.Local xdb.TZLocation = time.Local - var user map[int64]User - var limitUser []interface{} u := &User{Status: 2} xdb.Where("limittime <= ?", time.Now()).And("status = ?", 1).Update(u) - xdb.Where("status= ?", 2).Find(u) + user := make(map[int64]User) + limitUser := make([]interface{}, 0) + xdb.Where("status= ?", 2).Find(user) for _, v := range user { limitUser = append(limitUser, v.Username) } diff --git a/server/sessdata/session.go b/server/sessdata/session.go index 8b651a3..cbb6675 100644 --- a/server/sessdata/session.go +++ b/server/sessdata/session.go @@ -117,14 +117,10 @@ func checkSession() { // 状态为过期的用户踢下线 func CloseUserLimittimeSession() { s := mapset.NewSetFromSlice(dbdata.CheckUserlimittime()) - for k, v := range sessions { - sessMux.Lock() - v.mux.Lock() - if !v.IsActive && s.Contains(v.Username) { - delete(sessions, k) + for _, v := range sessions { + if v.IsActive && s.Contains(v.Username) { + CloseSess(v.Token) } - v.mux.Unlock() - sessMux.Unlock() } } diff --git a/server/sessdata/start.go b/server/sessdata/start.go index 1d4243c..7862574 100644 --- a/server/sessdata/start.go +++ b/server/sessdata/start.go @@ -4,4 +4,5 @@ func Start() { initIpPool() checkSession() saveStatsInfo() + CloseUserLimittimeSession() }