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()
 }