From d1a5397d677ba7a6f34192779289d7c54a9f9306 Mon Sep 17 00:00:00 2001 From: astaxie Date: Mon, 8 Apr 2013 13:02:45 +0800 Subject: [PATCH] add session's readme --- session/README.md | 98 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 session/README.md diff --git a/session/README.md b/session/README.md new file mode 100644 index 00000000..f42c74b0 --- /dev/null +++ b/session/README.md @@ -0,0 +1,98 @@ +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/ \ No newline at end of file