xxxxxxx
This commit is contained in:
parent
b751fc5eb4
commit
61af9f0c8b
5 changed files with 118 additions and 65 deletions
41
session.go
41
session.go
|
@ -32,11 +32,29 @@ func ProviderNames() []string {
|
|||
return prdnames
|
||||
}
|
||||
|
||||
// MilisPerSec return time resolution (milliseconds / 1sec)
|
||||
// MilisPerSec return time resolution (milliseconds / 1sec) changed for short time in testing
|
||||
func MilisPerSec() int64 {
|
||||
return milis
|
||||
}
|
||||
|
||||
// Provider interace implement lifecycle for one session
|
||||
type Provider interface {
|
||||
//set additional params for provider ex: sql db connection, filesystem path .. etc.
|
||||
SetParams(params any) error
|
||||
//create new session using sid value
|
||||
Init(sid string) (Session, error)
|
||||
//read and return existing session by id or if not exist create new session
|
||||
Read(sid string) (Session, error)
|
||||
//destroy remove session with sid from storage if exist
|
||||
Destroy(sid string) error
|
||||
//regenerate id change old sid to newsid and preserve existing session data
|
||||
ChangeID(oldsid, newsid string) (err error)
|
||||
//Exists return true if session with sid exist
|
||||
Exists(sid string) bool
|
||||
//gc remove all outdated sessions
|
||||
GC(maxlifetime int64)
|
||||
}
|
||||
|
||||
// Session interface implement storage for one session and have maxLifetime and lastAccessTime
|
||||
type Session interface {
|
||||
//set session value and update last access time
|
||||
|
@ -49,22 +67,6 @@ type Session interface {
|
|||
SessionID() string
|
||||
}
|
||||
|
||||
// Provider interace implement lifecycle for one session
|
||||
type Provider interface {
|
||||
//create new session using sid value
|
||||
Init(sid string) (Session, error)
|
||||
//Exists return true if session with sid exist
|
||||
Exists(sid string) bool
|
||||
//read return existing session by id or if not exist create new session
|
||||
Read(sid string) (Session, error)
|
||||
//destroy remove session with sid from storage if exist
|
||||
Destroy(sid string) error
|
||||
//regenerate id change old sid to newsid and preserve existing session data
|
||||
RegenerateID(oldsid, newsid string) (err error)
|
||||
//gc remove all sessions with > maxLifetime
|
||||
GC(maxlifetime int64)
|
||||
}
|
||||
|
||||
// Register makes a session provide available by the provided name.
|
||||
// If Register is called twice with the same name or if driver is nil, it panics.
|
||||
func Register(name string, provide Provider) {
|
||||
|
@ -91,13 +93,14 @@ type SessOpts struct {
|
|||
Ssl bool
|
||||
}
|
||||
|
||||
// NewManager create new *Manager using SesOpts and aditional any other opts
|
||||
// NewManager create new *Manager using SesOpts and aditional any other opts for using in provider
|
||||
func NewManager(providerName string, sopts *SessOpts, adopts any) (*Manager, error) {
|
||||
var prv Provider
|
||||
var ok bool
|
||||
if prv, ok = provides[providerName]; !ok {
|
||||
return nil, fmt.Errorf("session: Provider: %q not found (forgotten import?)", providerName)
|
||||
}
|
||||
prv.SetParams(adopts)
|
||||
m := &Manager{
|
||||
provider: prv,
|
||||
sessOpts: sopts,
|
||||
|
@ -169,7 +172,7 @@ func (manager *Manager) Exists(sid string) bool {
|
|||
func (manager *Manager) RegenerateID(w http.ResponseWriter, r *http.Request) {
|
||||
if ck, err := r.Cookie(manager.sessOpts.CookieName); err == nil && ck.Value != "" {
|
||||
if newid, err := manager.sessionID(); err != nil {
|
||||
manager.provider.RegenerateID(ck.Value, newid)
|
||||
manager.provider.ChangeID(ck.Value, newid)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue