Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
admpub committed Feb 4, 2024
1 parent 2be4956 commit 4d31b23
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 14 deletions.
50 changes: 39 additions & 11 deletions application/library/config/session.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package config

import (
"path/filepath"
"reflect"

"github.com/webx-top/echo"
"github.com/webx-top/echo/middleware/session/engine"
Expand All @@ -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) {
Expand All @@ -58,42 +63,62 @@ 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`),
Network: sessionConfig.String(`network`),
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`),
}
Expand All @@ -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
}
}
}
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -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=
Expand Down

0 comments on commit 4d31b23

Please sign in to comment.