func NewMemoryStorer(maxAge, cleanInterval time.Duration) (*MemoryStorer, error) {
	if (maxAge != 0 && cleanInterval == 0) || (cleanInterval != 0 && maxAge == 0) {
		panic("if max age or clean interval is set, the other must also be set")
	}
	m := &MemoryStorer{
		sessions:      make(map[string]memorySession),
		maxAge:        maxAge,
		cleanInterval: cleanInterval,
	}
	return m, nil
}
NewMemoryStorer initializes and returns a new MemoryStorer object.
It takes the maxAge of how long each session should live in memory,
and a cleanInterval duration which defines how often the clean
task should check for maxAge sessions to be removed from memory.
Persistent storage can be attained by setting maxAge and cleanInterval
to zero, however the memory will be wiped when the server is restarted.
package abcsessions
import (
	"sync"
	"time"
)
type MemoryStorer struct {
	sessions map[string]memorySession
	maxAge time.Duration
	cleanInterval time.Duration
	mut sync.RWMutex
	wg sync.WaitGroup
	quit chan struct{}
}
type memorySession struct {
	expires time.Time
	value   string
}
func NewDefaultMemoryStorer() (*MemoryStorer, error) {
	return NewMemoryStorer(time.Hour*24*2, time.Hour)
}