/sessions

Gin middleware for session management

Primary LanguageGo

sessions

Build Status codecov Go Report Card GoDoc Join the chat at https://gitter.im/gin-gonic/gin

Gin middleware for session management with multi-backend support (currently cookie, Redis).

Examples

cookie-based

package main

import (
  "github.com/gin-contrib/sessions"
  "gopkg.in/gin-gonic/gin.v1"
)

func main() {
  r := gin.Default()
  store := sessions.NewCookieStore([]byte("secret"))
  r.Use(sessions.Sessions("mysession", store))

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

Redis

package main

import (
  "github.com/gin-contrib/sessions"
  "gopkg.in/gin-gonic/gin.v1"
)

func main() {
  r := gin.Default()
  store, _ := sessions.NewRedisStore(10, "tcp", "localhost:6379", "", []byte("secret"))
  r.Use(sessions.Sessions("session", store))

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