wsession

package module
v0.0.0-...-03ff34a Latest Latest
Warning

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

Go to latest
Published: Jan 9, 2022 License: MIT Imports: 5 Imported by: 0

README

wsession

GitHub Repo stars GitHub GitHub go.mod Go version GitHub CI Status Go Report Card Go.Dev reference codecov

Gin middleware for session management with multi-backend support:

Usage

Start using it

Download and install it:

go get github.com/wyy-go/wsession

Import it in your code:

import "github.com/wyy-go/wsession"

Basic Examples

single session
package main

import (
  "github.com/wyy-go/wsession"
  "github.com/wyy-go/wsession/cookie"
  "github.com/gin-gonic/gin"
)

func main() {
  r := gin.Default()
  store := cookie.NewStore([]byte("secret"))
  r.Use(wsession.New("mysession", store))

  r.GET("/hello", func(c *gin.Context) {
    session := wsession.Default(c)

    if session.Get("hello") != "world" {
      session.Set("hello", "world")
      session.Save()
    }

    c.JSON(200, gin.H{"hello": session.Get("hello")})
  })
  r.Run(":8000")
}
multiple sessions
package main

import (
  "github.com/wyy-go/wsession"
  "github.com/wyy-go/wsession/cookie"
  "github.com/gin-gonic/gin"
)

func main() {
  r := gin.Default()
  store := cookie.NewStore([]byte("secret"))
  sessionNames := []string{"a", "b"}
  r.Use(wsession.NewMany(sessionNames, store))

  r.GET("/hello", func(c *gin.Context) {
    sessionA := wsession.DefaultMany(c, "a")
    sessionB := wsession.DefaultMany(c, "b")

    if sessionA.Get("hello") != "world!" {
      sessionA.Set("hello", "world!")
      sessionA.Save()
    }

    if sessionB.Get("hello") != "world?" {
      sessionB.Set("hello", "world?")
      sessionB.Save()
    }

    c.JSON(200, gin.H{
      "a": sessionA.Get("hello"),
      "b": sessionB.Get("hello"),
    })
  })
  r.Run(":8000")
}

Backend Examples

package main

import (
  "github.com/wyy-go/wsession"
  "github.com/wyy-go/wsession/cookie"
  "github.com/gin-gonic/gin"
)

func main() {
  r := gin.Default()
  store := cookie.NewStore([]byte("secret"))
  r.Use(wsession.New("mysession", store))

  r.GET("/incr", func(c *gin.Context) {
    session := wsession.Default(c)
    var count int
    v := session.Get("count")
    if v == nil {
      count = 0
    } else {
      count = v.(int)
      count++
    }
    session.Set("count", count)
    session.Save()
    c.JSON(200, gin.H{"count": count})
  })
  r.Run(":8000")
}
Redis
package main

import (
  "github.com/wyy-go/wsession"
  "github.com/wyy-go/wsession/redis"
  "github.com/gin-gonic/gin"
)

func main() {
  r := gin.Default()
  store, _ := redis.NewStore(10, "tcp", "localhost:6379", "", []byte("secret"))
  r.Use(wsession.New("mysession", store))

  r.GET("/incr", func(c *gin.Context) {
    session := wsession.Default(c)
    var count int
    v := session.Get("count")
    if v == nil {
      count = 0
    } else {
      count = v.(int)
      count++
    }
    session.Set("count", count)
    session.Save()
    c.JSON(200, gin.H{"count": count})
  })
  r.Run(":8000")
}
memstore
package main

import (
  "github.com/wyy-go/wsession"
  "github.com/wyy-go/wsession/memstore"
  "github.com/gin-gonic/gin"
)

func main() {
  r := gin.Default()
  store := memstore.NewStore([]byte("secret"))
  r.Use(wsession.New("mysession", store))

  r.GET("/incr", func(c *gin.Context) {
    session := wsession.Default(c)
    var count int
    v := session.Get("count")
    if v == nil {
      count = 0
    } else {
      count = v.(int)
      count++
    }
    session.Set("count", count)
    session.Save()
    c.JSON(200, gin.H{"count": count})
  })
  r.Run(":8000")
}

Documentation

Index

Constants

View Source
const (
	DefaultKey = "github.com/wyy-go/wsession"
)

Variables

This section is empty.

Functions

func New

func New(name string, store Store) gin.HandlerFunc

func NewMany

func NewMany(names []string, store Store) gin.HandlerFunc

Types

type Options

type Options struct {
	Path   string
	Domain string
	// MaxAge=0 means no 'Max-Age' attribute specified.
	// MaxAge<0 means delete cookie now, equivalently 'Max-Age: 0'.
	// MaxAge>0 means Max-Age attribute present and given in seconds.
	MaxAge   int
	Secure   bool
	HttpOnly bool
}

Options stores configuration for a session or session store. Fields are a subset of http.Cookie fields.

func (Options) ToGorillaOptions

func (options Options) ToGorillaOptions() *gsessions.Options

type Session

type Session interface {
	// ID of the session, generated by stores. It should not be used for user data.
	ID() string
	// Get returns the session value associated to the given key.
	Get(key interface{}) interface{}
	// Set sets the session value associated to the given key.
	Set(key interface{}, val interface{})
	// Delete removes the session value associated to the given key.
	Delete(key interface{})
	// Clear deletes all values in the session.
	Clear()
	// AddFlash adds a flash message to the session.
	// A single variadic argument is accepted, and it is optional: it defines the flash key.
	// If not defined "_flash" is used by default.
	AddFlash(value interface{}, vars ...string)
	// Flashes returns a slice of flash messages from the session.
	// A single variadic argument is accepted, and it is optional: it defines the flash key.
	// If not defined "_flash" is used by default.
	Flashes(vars ...string) []interface{}
	// Options sets configuration for a session.
	Options(Options)
	// Save saves all sessions used during the current request.
	Save() error
}

Session stores the values and optional configuration for a session. Wraps thinly gorilla-session methods.

func Default

func Default(c *gin.Context) Session

Default shortcut to get session

func DefaultMany

func DefaultMany(c *gin.Context, name string) Session

DefaultMany shortcut to get session with given name

type Store

type Store interface {
	sessions.Store
	Options(Options)
}

Directories

Path Synopsis
_example
Package tester is a package to test each packages of session stores, such as cookie, redis, memcached, mongo, memstore.
Package tester is a package to test each packages of session stores, such as cookie, redis, memcached, mongo, memstore.

Jump to

Keyboard shortcuts

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