mirror of
https://github.com/astaxie/beego.git
synced 2024-11-23 00:30:56 +00:00
98 lines
2.7 KiB
Markdown
98 lines
2.7 KiB
Markdown
|
sessionmanager
|
||
|
==============
|
||
|
|
||
|
sessionmanager is a golang session manager. It can use session for many providers.Just like the `database/sql` and `database/sql/driver`.
|
||
|
|
||
|
##How to install
|
||
|
|
||
|
go get github.com/astaxie/beego/session
|
||
|
|
||
|
|
||
|
##how many providers support
|
||
|
Now this sessionmanager support memory/file/redis/mysql
|
||
|
|
||
|
|
||
|
|
||
|
##How do we use it?
|
||
|
|
||
|
first you must import it
|
||
|
|
||
|
|
||
|
import (
|
||
|
"github.com/astaxie/beego/session"
|
||
|
)
|
||
|
|
||
|
then in you web app init the globalsession manager
|
||
|
|
||
|
var globalSessions *session.Manager
|
||
|
|
||
|
use memory as providers:
|
||
|
|
||
|
func init() {
|
||
|
globalSessions, _ = session.NewManager("memory", "gosessionid", 3600,"")
|
||
|
go globalSessions.GC()
|
||
|
}
|
||
|
|
||
|
use mysql as providers,the last param is the DNS, learn more from [mysql](https://github.com/Go-SQL-Driver/MySQL#dsn-data-source-name):
|
||
|
|
||
|
func init() {
|
||
|
globalSessions, _ = session.NewManager("mysql", "gosessionid", 3600,"username:password@protocol(address)/dbname?param=value")
|
||
|
go globalSessions.GC()
|
||
|
}
|
||
|
|
||
|
use file as providers,the last param is the path where to store the file:
|
||
|
|
||
|
func init() {
|
||
|
globalSessions, _ = session.NewManager("file", "gosessionid", 3600,"./tmp")
|
||
|
go globalSessions.GC()
|
||
|
}
|
||
|
|
||
|
use redis as providers,the last param is the redis's conn address:
|
||
|
|
||
|
func init() {
|
||
|
globalSessions, _ = session.NewManager("redis", "gosessionid", 3600,"127.0.0.1:6379")
|
||
|
go globalSessions.GC()
|
||
|
}
|
||
|
|
||
|
at last in the handlerfunc you can use it like this
|
||
|
|
||
|
func login(w http.ResponseWriter, r *http.Request) {
|
||
|
sess := globalSessions.SessionStart(w, r)
|
||
|
defer sess.SessionRelease()
|
||
|
username := sess.Get("username")
|
||
|
fmt.Println(username)
|
||
|
if r.Method == "GET" {
|
||
|
t, _ := template.ParseFiles("login.gtpl")
|
||
|
t.Execute(w, nil)
|
||
|
} else {
|
||
|
fmt.Println("username:", r.Form["username"])
|
||
|
sess.Set("username", r.Form["username"])
|
||
|
fmt.Println("password:", r.Form["password"])
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
##How to write own provider
|
||
|
When we develop a web app, maybe you want to write a provider because you must meet the requirements.
|
||
|
|
||
|
Write a provider is so easy. You only define two struct type(Session and Provider),which satisfy the interface definition.Maybe The memory provider is a good example for you.
|
||
|
|
||
|
type SessionStore 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() // release the resource
|
||
|
}
|
||
|
|
||
|
type Provider interface {
|
||
|
SessionInit(maxlifetime int64, savePath string) error
|
||
|
SessionRead(sid string) (SessionStore, error)
|
||
|
SessionDestroy(sid string) error
|
||
|
SessionGC()
|
||
|
}
|
||
|
|
||
|
##LICENSE
|
||
|
|
||
|
BSD License http://creativecommons.org/licenses/BSD/
|