From 4d31b237d4acea2e93c3906f1a01b88b74c3f2ee Mon Sep 17 00:00:00 2001 From: Hank Shen Date: Sun, 4 Feb 2024 16:51:06 +0800 Subject: [PATCH] update --- application/library/config/session.go | 50 +++++++++++++++++++++------ go.mod | 2 +- go.sum | 4 +-- 3 files changed, 42 insertions(+), 14 deletions(-) diff --git a/application/library/config/session.go b/application/library/config/session.go index 82d9cda760..e7f048f8a4 100644 --- a/application/library/config/session.go +++ b/application/library/config/session.go @@ -19,6 +19,7 @@ package config import ( "path/filepath" + "reflect" "github.com/webx-top/echo" "github.com/webx-top/echo/middleware/session/engine" @@ -29,9 +30,13 @@ import ( var ( SessionOptions *echo.SessionOptions - CookieOptions *cookie.CookieOptions + CookieOptions *echo.CookieOptions SessionEngine = `file` SessionName = `SID` + + sessionStoreCookieOptions *cookie.CookieOptions + sessionStoreFileOptions *file.FileOptions + sessionStoreRedisOptions *redis.RedisOptions ) func InitSessionOptions(c *Config) { @@ -58,34 +63,54 @@ func InitSessionOptions(c *Config) { if sessionConfig == nil { sessionConfig = echo.H{} } - SessionOptions = echo.NewSessionOptions(sessionEngine, sessionName, &echo.CookieOptions{ + _cookieOptions := &echo.CookieOptions{ Prefix: c.Cookie.Prefix, Domain: c.Cookie.Domain, Path: c.Cookie.Path, MaxAge: c.Cookie.MaxAge, HttpOnly: c.Cookie.HttpOnly, - }) + } + if CookieOptions == nil || SessionOptions == nil || + !reflect.DeepEqual(_cookieOptions, CookieOptions) || + (SessionOptions.Engine != sessionEngine || SessionOptions.Name != sessionName) { + if SessionOptions != nil { + *SessionOptions = *echo.NewSessionOptions(sessionEngine, sessionName, _cookieOptions) + } else { + SessionOptions = echo.NewSessionOptions(sessionEngine, sessionName, _cookieOptions) + } + if CookieOptions != nil { + *CookieOptions = *_cookieOptions + } else { + CookieOptions = _cookieOptions + } + } //================================== // 注册session存储引擎 //================================== //1. 注册默认引擎:cookie - CookieOptions = cookie.NewCookieOptions(c.Cookie.HashKey, c.Cookie.BlockKey) - cookie.RegWithOptions(CookieOptions) + _sessionStoreCookieOptions := cookie.NewCookieOptions(c.Cookie.HashKey, c.Cookie.BlockKey) + if sessionStoreCookieOptions == nil || !reflect.DeepEqual(_sessionStoreCookieOptions, sessionStoreCookieOptions) { + cookie.RegWithOptions(_sessionStoreCookieOptions) + sessionStoreCookieOptions = _sessionStoreCookieOptions + } switch sessionEngine { case `file`: //2. 注册文件引擎:file fileOptions := &file.FileOptions{ SavePath: sessionConfig.String(`savePath`), - KeyPairs: CookieOptions.KeyPairs, + KeyPairs: sessionStoreCookieOptions.KeyPairs, MaxAge: sessionConfig.Int(`maxAge`), } if len(fileOptions.SavePath) == 0 { fileOptions.SavePath = filepath.Join(echo.Wd(), `data`, `cache`, `sessions`) } - file.RegWithOptions(fileOptions) - engine.Del(`redis`) + if sessionStoreFileOptions == nil || !engine.Exists(`file`) || !reflect.DeepEqual(fileOptions, sessionStoreFileOptions) { + file.RegWithOptions(fileOptions) + engine.Del(`redis`) + sessionStoreFileOptions = fileOptions + } case `redis`: //3. 注册redis引擎:redis redisOptions := &redis.RedisOptions{ Size: sessionConfig.Int(`maxIdle`), @@ -93,7 +118,7 @@ func InitSessionOptions(c *Config) { Address: sessionConfig.String(`address`), Password: sessionConfig.String(`password`), DB: sessionConfig.Uint(`db`), - KeyPairs: CookieOptions.KeyPairs, + KeyPairs: sessionStoreCookieOptions.KeyPairs, MaxAge: sessionConfig.Int(`maxAge`), MaxReconnect: sessionConfig.Int(`maxReconnect`), } @@ -109,7 +134,10 @@ func InitSessionOptions(c *Config) { if redisOptions.MaxReconnect <= 0 { redisOptions.MaxReconnect = 30 } - redis.RegWithOptions(redisOptions) - engine.Del(`file`) + if sessionStoreRedisOptions == nil || !engine.Exists(`redis`) || !reflect.DeepEqual(redisOptions, sessionStoreRedisOptions) { + redis.RegWithOptions(redisOptions) + engine.Del(`file`) + sessionStoreRedisOptions = redisOptions + } } } diff --git a/go.mod b/go.mod index ff700f39da..4d7cba2458 100644 --- a/go.mod +++ b/go.mod @@ -113,7 +113,7 @@ require ( github.com/webx-top/codec v0.3.0 github.com/webx-top/com v1.2.12 github.com/webx-top/db v1.27.3 - github.com/webx-top/echo v2.42.29+incompatible + github.com/webx-top/echo v2.42.32+incompatible github.com/webx-top/image v0.1.0 github.com/webx-top/pagination v0.2.8 // indirect golang.org/x/crypto v0.18.0 diff --git a/go.sum b/go.sum index dd7e38b500..715679c642 100644 --- a/go.sum +++ b/go.sum @@ -2836,8 +2836,8 @@ github.com/webx-top/echo v2.18.3+incompatible/go.mod h1:ufVP//GwP1suggBSQW7l8G9X github.com/webx-top/echo v2.33.3+incompatible/go.mod h1:ufVP//GwP1suggBSQW7l8G9XcKxZM+FIfCMElLAQqF8= github.com/webx-top/echo v2.35.2+incompatible/go.mod h1:ufVP//GwP1suggBSQW7l8G9XcKxZM+FIfCMElLAQqF8= github.com/webx-top/echo v2.42.12+incompatible/go.mod h1:ufVP//GwP1suggBSQW7l8G9XcKxZM+FIfCMElLAQqF8= -github.com/webx-top/echo v2.42.29+incompatible h1:tI3sbFSy4KbjQSoxpRB6iq0nIfS6btUMCx7DqPReYb0= -github.com/webx-top/echo v2.42.29+incompatible/go.mod h1:ufVP//GwP1suggBSQW7l8G9XcKxZM+FIfCMElLAQqF8= +github.com/webx-top/echo v2.42.32+incompatible h1:lAE+qBvONQpeRiO6RO0fnckOZ3yOHSXR1Wo4iEGhKTc= +github.com/webx-top/echo v2.42.32+incompatible/go.mod h1:ufVP//GwP1suggBSQW7l8G9XcKxZM+FIfCMElLAQqF8= github.com/webx-top/echo-prometheus v1.0.7/go.mod h1:d+/TpxZTP8k7yG1vo1Nlxyk5YVQ4p9Mow0mjqJUk1uU= github.com/webx-top/echo-prometheus v1.1.1 h1:Z41F5A7R4pC/oLlQta/1uEZybOfnY1BCUvNC3dM5RZg= github.com/webx-top/echo-prometheus v1.1.1/go.mod h1:T4mJg71spjV3J8IJQ+2EN/hQUB+FgWWsSXZCQ0KoalE=