store

package
v2.4.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 21, 2026 License: MIT Imports: 9 Imported by: 0

Documentation

Overview

Package store provides SessionStore implementations for the sessions package.

MemoryStore keeps sessions in process memory. RedisStore persists sessions in Redis with a TTL derived from Session.Expired. Keys are {prefix}session:{token}; the prefix is empty unless WithKeyPrefix is given.

Index

Examples

Constants

This section is empty.

Variables

View Source
var ErrEmptySubject = errors.New("subject must not be empty")

ErrEmptySubject is returned by RevokeUser for an empty subject.

View Source
var ErrNonPositiveTTL = errors.New("session ttl must be positive")

ErrNonPositiveTTL is returned by RedisStore.Create when Session.Expired is not in the future.

Functions

This section is empty.

Types

type MemoryStore

type MemoryStore[C jwt.Claims] struct {
	// contains filtered or unexported fields
}

MemoryStore is an in-memory SessionStore backed by sync.Map. Sessions are lost on process restart and are not shared across instances.

func NewMemoryStore

func NewMemoryStore[C jwt.Claims]() *MemoryStore[C]

NewMemoryStore returns an empty MemoryStore.

Example
package main

import (
	"github.com/golang-jwt/jwt/v5"
	"github.com/mrFokin/sessions/v2/store"
)

func main() {
	s := store.NewMemoryStore[jwt.MapClaims]()
	_ = s
}

func (*MemoryStore[C]) Create

func (m *MemoryStore[C]) Create(s sessions.Session[C]) error

Create stores session keyed by session.Token.

func (*MemoryStore[C]) Delete

func (m *MemoryStore[C]) Delete(refreshToken string) error

Delete removes a session by refresh token.

func (*MemoryStore[C]) Read

func (m *MemoryStore[C]) Read(refreshToken string) (session sessions.Session[C], err error)

Read loads a session by refresh token. It returns sessions.ErrSessionNotFound if the session does not exist.

func (*MemoryStore[C]) RevokeUser added in v2.3.0

func (m *MemoryStore[C]) RevokeUser(subject string, _ time.Duration) error

RevokeUser makes every session of subject created up to now unreadable. The revocation is kept for the life of the process, so ttl is ignored. It returns ErrEmptySubject for an empty subject.

type RedisOption added in v2.2.0

type RedisOption func(*redisConfig)

RedisOption configures a RedisStore.

func WithKeyPrefix added in v2.2.0

func WithKeyPrefix(prefix string) RedisOption

WithKeyPrefix prepends prefix to every key the store writes, so several applications can share one Redis database without seeing each other's sessions (and so an ACL rule like ~myapp:* can fence each of them in). The prefix is used verbatim — include the separator yourself: WithKeyPrefix("myapp:") gives myapp:session:{token}. Default: no prefix.

Example
package main

import (
	"github.com/golang-jwt/jwt/v5"
	"github.com/mrFokin/sessions/v2/store"
	"github.com/redis/go-redis/v9"
)

func main() {
	// Keys become myapp:session:{token}, so other applications sharing this
	// Redis database cannot read or delete these sessions.
	s := store.NewRedisStore[jwt.MapClaims](&redis.Options{
		Addr: "localhost:6379",
	}, store.WithKeyPrefix("myapp:"))
	defer s.Close()
}

type RedisStore

type RedisStore[C jwt.Claims] struct {
	// contains filtered or unexported fields
}

RedisStore is a Redis-backed SessionStore. Keys are {prefix}session:{token} (no prefix unless WithKeyPrefix is given) with TTL until Session.Expired.

func NewRedisStore

func NewRedisStore[C jwt.Claims](opt *redis.Options, opts ...RedisOption) *RedisStore[C]

NewRedisStore returns a RedisStore using opt. Call Close when finished.

Example
package main

import (
	"github.com/golang-jwt/jwt/v5"
	"github.com/mrFokin/sessions/v2/store"
	"github.com/redis/go-redis/v9"
)

func main() {
	s := store.NewRedisStore[jwt.MapClaims](&redis.Options{
		Addr: "localhost:6379",
	})
	defer s.Close()
}

func (*RedisStore[C]) Close

func (s *RedisStore[C]) Close() error

Close closes the underlying Redis client.

func (*RedisStore[C]) Create

func (s *RedisStore[C]) Create(session sessions.Session[C]) error

Create stores session in Redis. It returns ErrNonPositiveTTL when Session.Expired is not in the future.

func (*RedisStore[C]) Delete

func (s *RedisStore[C]) Delete(refreshToken string) error

Delete removes a session by refresh token.

func (*RedisStore[C]) Read

func (s *RedisStore[C]) Read(refreshToken string) (session sessions.Session[C], err error)

Read loads a session by refresh token. It returns sessions.ErrSessionNotFound if the key is missing.

func (*RedisStore[C]) RevokeUser added in v2.3.0

func (s *RedisStore[C]) RevokeUser(subject string, ttl time.Duration) error

RevokeUser makes every session of subject (its "sub" claim) created up to now unreadable by recording the time under {prefix}revoked:{subject} for ttl. Read compares it with Session.Created, so nothing is enumerated or deleted here and sessions started later are unaffected. It returns ErrEmptySubject for an empty subject and ErrNonPositiveTTL when ttl is not positive.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL