From b1890a2c8a6a5bf1f4eb0ed591a7e14846a0a426 Mon Sep 17 00:00:00 2001 From: wsczx <wsc@wsczx.com> Date: Mon, 17 Oct 2022 12:17:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=BF=87=E6=9C=9F=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=97=A0=E6=B3=95=E8=B8=A2=E4=B8=8B=E7=BA=BF=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=8C=E4=BC=98=E5=8C=96=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E8=BF=87=E6=9C=9F=E7=94=A8=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/admin/api_user.go | 3 ++- server/dbdata/db_orm.go | 6 +++--- server/sessdata/session.go | 10 +++------- server/sessdata/start.go | 1 + 4 files changed, 9 insertions(+), 11 deletions(-) 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() }