fiber/docs/middleware/session.md

4.9 KiB

id
session

Session

Session middleware for Fiber.

:::note This middleware uses our Storage package to support various databases through a single interface. The default configuration for this middleware saves data to memory, see the examples below for other databases. :::

Signatures

func New(config ...Config) *Store
func (s *Store) RegisterType(i any)
func (s *Store) Get(c fiber.Ctx) (*Session, error)
func (s *Store) Delete(id string) error
func (s *Store) Reset() error

func (s *Session) Get(key string) any
func (s *Session) Set(key string, val any)
func (s *Session) Delete(key string)
func (s *Session) Destroy() error
func (s *Session) Reset() error
func (s *Session) Regenerate() error
func (s *Session) Save() error
func (s *Session) Fresh() bool
func (s *Session) ID() string
func (s *Session) Keys() []string
func (s *Session) SetExpiry(exp time.Duration)

:::caution Storing any values are limited to built-ins Go types. :::

Examples

Import the middleware package that is part of the Fiber web framework

import (
  "github.com/gofiber/fiber/v3"
  "github.com/gofiber/fiber/v3/middleware/session"
)

After you initiate your Fiber app, you can use the following possibilities:

// Initialize default config
// This stores all of your app's sessions
store := session.New()

app.Get("/", func(c fiber.Ctx) error {
    // Get session from storage
    sess, err := store.Get(c)
    if err != nil {
        panic(err)
    }

    // Get value
    name := sess.Get("name")

    // Set key/value
    sess.Set("name", "john")

    // Get all Keys
    keys := sess.Keys()

    // Delete key
    sess.Delete("name")

    // Destroy session
    if err := sess.Destroy(); err != nil {
        panic(err)
    }

	// Sets a specific expiration for this session
	sess.SetExpiry(time.Second * 2)

    // Save session
    if err := sess.Save(); err != nil {
		panic(err)
	}

	return c.SendString(fmt.Sprintf("Welcome %v", name))
})

Config

Property Type Description Default
Expiration time.Duration Allowed session duration. 24 * time.Hour
Storage fiber.Storage Storage interface to store the session data. memory.New()
KeyLookup string KeyLookup is a string in the form of "<source>:<name>" that is used to extract session id from the request. "cookie:session_id"
CookieDomain string Domain of the cookie. ""
CookiePath string Path of the cookie. ""
CookieSecure bool Indicates if cookie is secure. false
CookieHTTPOnly bool Indicates if cookie is HTTP only. false
CookieSameSite string Value of SameSite cookie. "Lax"
CookieSessionOnly bool Decides whether cookie should last for only the browser session. Ignores Expiration if set to true. false
KeyGenerator func() string KeyGenerator generates the session key. utils.UUIDv4
CookieName (Deprecated) string Deprecated: Please use KeyLookup. The session name. ""

Default Config

var ConfigDefault = Config{
	Expiration:   24 * time.Hour,
	KeyLookup:    "cookie:session_id",
	KeyGenerator: utils.UUIDv4,
	source:       "cookie",
	sessionName:  "session_id",
}

Constants

const (
	SourceCookie   Source = "cookie"
	SourceHeader   Source = "header"
	SourceURLQuery Source = "query"
)

Custom Storage/Database

You can use any storage from our storage package.

storage := sqlite3.New() // From github.com/gofiber/storage/sqlite3
store := session.New(session.Config{
	Storage: storage,
})

To use the store, see the Examples.