This commit is contained in:
DarkGopher 2025-06-13 16:19:50 +02:00
parent b751fc5eb4
commit 61af9f0c8b
5 changed files with 118 additions and 65 deletions

View file

@ -3,6 +3,7 @@ package memory
import (
"container/list"
"fmt"
"sync"
"time"
@ -16,47 +17,6 @@ func init() {
session.Register("memory", pder)
}
// SessionMemory implement sessionma.Session interface only in memory
type SessionMemory struct {
sid string
atime time.Time
data map[any]any
}
func (sm *SessionMemory) resolvepanic(err *error) {
if r := recover(); r != nil {
*err = r.(error)
}
}
// Set -
func (sm *SessionMemory) Set(k any, v any) (err error) {
defer pder.updateAtime(sm.sid)
defer sm.resolvepanic(&err)
sm.data[k] = v
return
}
// Get -
func (sm *SessionMemory) Get(k any) (v any, err error) {
defer pder.updateAtime(sm.sid)
defer sm.resolvepanic(&err)
return sm.data[k], err
}
// Delete -
func (sm *SessionMemory) Delete(k any) (err error) {
defer pder.updateAtime(sm.sid)
delete(sm.data, k)
return
}
// SessionID -
func (sm *SessionMemory) SessionID() string {
return sm.sid
}
// ProviderMemory implement memory session provider
type ProviderMemory struct {
lock sync.Mutex
@ -73,6 +33,11 @@ func (pder *ProviderMemory) updateAtime(sid string) {
}
}
// SetParams for memory provider not possible
func (pder *ProviderMemory) SetParams(pr any) error {
return fmt.Errorf("Not possible set parameters for memory session provider")
}
// Init create new session store for sid
func (pder *ProviderMemory) Init(sid string) (ses session.Session, err error) {
pder.lock.Lock()
@ -114,8 +79,8 @@ func (pder *ProviderMemory) Destroy(sid string) (err error) {
return
}
// RegenerateID replace session ID to new one and preserve all data
func (pder *ProviderMemory) RegenerateID(oldsid, newsid string) (err error) {
// ChangeID replace session ID to new one and preserve all data
func (pder *ProviderMemory) ChangeID(oldsid, newsid string) (err error) {
pder.lock.Lock()
defer pder.lock.Unlock()
if ssel, ok := pder.sessions[oldsid]; ok {
@ -145,3 +110,44 @@ func (pder *ProviderMemory) GC(maxlifetime int64) {
}
}
}
// SessionMemory implement sessionma.Session interface only in memory
type SessionMemory struct {
sid string
atime time.Time
data map[any]any
}
func (sm *SessionMemory) resolvepanic(err *error) {
if r := recover(); r != nil {
*err = r.(error)
}
}
// Set -
func (sm *SessionMemory) Set(k any, v any) (err error) {
defer pder.updateAtime(sm.sid)
defer sm.resolvepanic(&err)
sm.data[k] = v
return
}
// Get -
func (sm *SessionMemory) Get(k any) (v any, err error) {
defer pder.updateAtime(sm.sid)
defer sm.resolvepanic(&err)
return sm.data[k], err
}
// Delete -
func (sm *SessionMemory) Delete(k any) (err error) {
defer pder.updateAtime(sm.sid)
delete(sm.data, k)
return
}
// SessionID -
func (sm *SessionMemory) SessionID() string {
return sm.sid
}