Skip to content

weisd/session

 
 

Repository files navigation

session

Middleware session is the session manager of Macaron. It can use many session providers, including cookie, memory, file, redis, memcache, PostgreSQL, MySQL, and couchbase.

API Reference

Installation

go get github.com/weisd/session

Usage

import (
	"github.com/Unknwon/macaron"
	"github.com/weisd/session"
)

func main() {
  	m := macaron.Classic()
  	m.Use(session.Sessioner())
	
	m.Get("/", func(sess session.Store) string {
		sess.Set("session", "session middleware")
		return sess.Get("session").(string)
	})
	
	m.Get("/signup", func(ctx *macaron.Context, f *session.Flash) {
		f.Success("yes!!!")
		f.Error("opps...")
		// Use following fields in template
		// - {{.Flash.SuccessMsg}}
		// - {{.Flash.ErrorMsg}}
		ctx.HTML(200, "signup", ctx.Data)
	})

	m.Run()
}

To use redis, memcache, PostgreSQL, MySQL, or couchbase as adapter, you should import their init functions:

import (
	_ "github.com/weisd/session/redis"
	_ "github.com/weisd/session/memcache"
	_ "github.com/weisd/session/postgres"
	_ "github.com/weisd/session/mysql"
	_ "github.com/weisd/session/couchbase"
)

Options

session.Sessioner comes with a variety of configuration options:

// ...
m.Use(session.Sessioner(session.Options{
	Provider:		"memory", // Name of provider.
	Config: Config{
		CookieName:		"MacaronSession", // Key name store in cookie.
		Gclifetime:		3600, // GC interval for memory adapter.
		ProviderConfig:	"./tmp", // Provider configuration string.
	},
}))
// ...

Example Options

  • memory:

     // ...
     m.Use(session.Sessioner(session.Options{
     	Provider:		"memory", // Name of provider.
     	Config: Config{
     		CookieName:		"MacaronSession", // Key name store in cookie.
     		Gclifetime:		3600, // GC interval for memory adapter.
     		ProviderConfig:	"./tmp", // Provider configuration string.
     	},
     }))
     // ...
  • file:

     // ...
     m.Use(session.Sessioner(session.Options{
     	Provider:		"file", // Name of provider.
     	Config: Config{
     		CookieName:		"MacaronSession", // Key name store in cookie.
     		Gclifetime:		3600, // GC interval for memory adapter.
     		ProviderConfig:	"./tmp", // Provider configuration string.
     	},
     }))
     // ...
  • Redis:

     // ...
     m.Use(session.Sessioner(session.Options{
     	Provider:		"redis", // Name of provider.
     	Config: Config{
     		CookieName:		"MacaronSession", // Key name store in cookie.
     		Gclifetime:		3600, // GC interval for memory adapter.
     		ProviderConfig:	"127.0.0.1:6379,100,macaron", // Provider configuration string.
     	},
     }))
     // ...
  • MySQL:

     // ...
     m.Use(session.Sessioner(session.Options{
     	Provider:		"mysql", // Name of provider.
     	Config: Config{
     		CookieName:		"MacaronSession", // Key name store in cookie.
     		Gclifetime:		3600, // GC interval for memory adapter.
     		ProviderConfig:	"username:password@protocol(address)/dbname?param=value", // Provider configuration string.
     	},
     }))
     // ...
  • Cookie:

     // ...
     m.Use(session.Sessioner(session.Options{
     	Provider:		"cookie", // Name of provider.
     	Config: Config{
     		CookieName:		"MacaronSession", // Key name store in cookie.
     		Gclifetime:		3600, // GC interval for memory adapter.
     		ProviderConfig:	"{\"cookieName\":\"gosessionid\",\"securityKey\":\"beegocookiehashkey\"}", // Provider configuration string.
     	},
     }))
     // ...

How to write own provider?

When you develop a web app, maybe you want to write own provider because you must meet the requirements.

Writing a provider is easy. You only need to define two struct types (Session and Provider), which satisfy the interface definition. Maybe you will find the memory provider is a good example.

type Store interface {
	Set(key, value interface{}) error     //set session value
	Get(key interface{}) interface{}      //get session value
	Delete(key interface{}) error         //delete session value
	SessionID() string                    //back current sessionID
	SessionRelease(w http.ResponseWriter) // release the resource & save data to provider & return the data
	Flush() error                         //delete all data
}

type Provider interface {
	SessionInit(gclifetime int64, config string) error
	SessionRead(sid string) (SessionStore, error)
	SessionExist(sid string) bool
	SessionRegenerate(oldsid, sid string) (Store, error)
	SessionDestroy(sid string) error
	SessionAll() int //get all active session
	SessionGC()
}

License

This project is under Apache v2 License. See the LICENSE file for the full license text.

About

Package session is a middleware that provides the session manager of Macaron.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 100.0%