xxxxxxx
This commit is contained in:
parent
b751fc5eb4
commit
61af9f0c8b
5 changed files with 118 additions and 65 deletions
|
@ -1,2 +0,0 @@
|
|||
// Package file implements sessions saved into filesystem persistently encoded using gob
|
||||
package file
|
44
storage/files/files.go
Normal file
44
storage/files/files.go
Normal file
|
@ -0,0 +1,44 @@
|
|||
// Package files implements sessions saved into filesystem persistently encoded using gob
|
||||
package files
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
)
|
||||
|
||||
const (
|
||||
sessDir string = "go-session"
|
||||
sessExt string = "gsd"
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
||||
}
|
||||
|
||||
// ProviderFiles implement filesystem session provider
|
||||
type ProviderFiles struct {
|
||||
sessPath string
|
||||
lock sync.Mutex
|
||||
}
|
||||
|
||||
func (pder *ProviderFiles) ckdir() string {
|
||||
return pder.sessPath + sessDir
|
||||
}
|
||||
|
||||
// SetParams for files session provider set base path in filesystem for save sessions
|
||||
func (pder *ProviderFiles) SetParams(p any) (err error) {
|
||||
if p != nil {
|
||||
if s, ok := p.(string); ok {
|
||||
pder.sessPath = s
|
||||
return
|
||||
}
|
||||
return fmt.Errorf("Parameter for files session provider is not string")
|
||||
}
|
||||
return fmt.Errorf("Parameter for files session provider must not be nil")
|
||||
}
|
||||
|
||||
// Init create session file if not exists and retturn *Session
|
||||
func (pder *ProviderFiles) Init(sid string) (err error) {
|
||||
//sessdir := sid + sessExt
|
||||
return
|
||||
}
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue