All files and memory storage tests pass
This commit is contained in:
parent
045163310e
commit
23b020ec9b
4 changed files with 72 additions and 46 deletions
|
@ -10,7 +10,7 @@ import (
|
|||
"git.mtux.eu/darkgopher/session/util"
|
||||
)
|
||||
|
||||
var pder = &ProviderMemory{list: list.New()}
|
||||
var pder = &ProviderMemory{li: list.New()}
|
||||
|
||||
func init() {
|
||||
pder.sessions = make(map[string]*list.Element, 0)
|
||||
|
@ -21,7 +21,7 @@ func init() {
|
|||
type ProviderMemory struct {
|
||||
lock sync.Mutex
|
||||
sessions map[string]*list.Element //save to RAM
|
||||
list *list.List //for GC
|
||||
li *list.List //for GC
|
||||
}
|
||||
|
||||
func (pder *ProviderMemory) updateAtime(sid string) {
|
||||
|
@ -29,7 +29,7 @@ func (pder *ProviderMemory) updateAtime(sid string) {
|
|||
defer pder.lock.Unlock()
|
||||
if ssel, ok := pder.sessions[sid]; ok {
|
||||
ssel.Value.(*SessionMemory).atime = time.Now()
|
||||
pder.list.MoveToFront(ssel)
|
||||
pder.li.MoveToFront(ssel)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -44,25 +44,17 @@ func (pder *ProviderMemory) Init(sid string) (ses session.Session, err error) {
|
|||
defer pder.lock.Unlock()
|
||||
data := make(map[any]any, 0)
|
||||
sess := &SessionMemory{sid, time.Now(), data}
|
||||
sessel := pder.list.PushBack(sess)
|
||||
sessel := pder.li.PushBack(sess)
|
||||
pder.sessions[sid] = sessel
|
||||
return sess, nil
|
||||
}
|
||||
|
||||
// Exists return true if session with sid exists
|
||||
func (pder *ProviderMemory) Exists(sid string) (ex bool) {
|
||||
if _, ex := pder.sessions[sid]; ex {
|
||||
return ex
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Load return existing unexpired session or create new
|
||||
func (pder *ProviderMemory) Load(sid string) (ses session.Session, err error) {
|
||||
pder.lock.Lock()
|
||||
defer pder.lock.Unlock()
|
||||
if ssel, ok := pder.sessions[sid]; ok {
|
||||
return ssel.Value.(*SessionMemory), nil
|
||||
if pder.Exists(sid) {
|
||||
return pder.sessions[sid].Value.(*SessionMemory), nil
|
||||
}
|
||||
return pder.Init(sid)
|
||||
}
|
||||
|
@ -72,7 +64,7 @@ func (pder *ProviderMemory) Destroy(sid string) (err error) {
|
|||
pder.lock.Lock()
|
||||
defer pder.lock.Unlock()
|
||||
if ssel, ok := pder.sessions[sid]; ok {
|
||||
pder.list.Remove(ssel)
|
||||
pder.li.Remove(ssel)
|
||||
delete(pder.sessions, sid)
|
||||
return nil
|
||||
}
|
||||
|
@ -91,17 +83,25 @@ func (pder *ProviderMemory) ChangeID(oldsid, newsid string) (err error) {
|
|||
return
|
||||
}
|
||||
|
||||
// Exists return true if session with sid exists
|
||||
func (pder *ProviderMemory) Exists(sid string) (ex bool) {
|
||||
if _, ex := pder.sessions[sid]; ex {
|
||||
return ex
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// GC iterate all sessions and delete expired
|
||||
func (pder *ProviderMemory) GC(maxlifetime int64) {
|
||||
pder.lock.Lock()
|
||||
defer pder.lock.Unlock()
|
||||
for {
|
||||
ssel := pder.list.Back()
|
||||
ssel := pder.li.Back()
|
||||
if ssel == nil {
|
||||
break
|
||||
}
|
||||
if ssel.Value.(*SessionMemory).atime.UnixMilli()+(maxlifetime*session.MilisPerSec()) < time.Now().UnixMilli() {
|
||||
pder.list.Remove(ssel)
|
||||
pder.li.Remove(ssel)
|
||||
delete(pder.sessions, ssel.Value.(*SessionMemory).sid)
|
||||
} else {
|
||||
break
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue