67695fac9e
修改redis重启后不会自动连接 |
||
---|---|---|
.. | ||
README.md | ||
sess_file.go | ||
sess_gob.go | ||
sess_mem.go | ||
sess_mysql.go | ||
sess_redis.go | ||
sess_test.go | ||
session.go |
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:
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/