github.com/astaxie/beego@v1.12.3/session/README.md (about) 1 session 2 ============== 3 4 session is a Go session manager. It can use many session providers. Just like the `database/sql` and `database/sql/driver`. 5 6 ## How to install? 7 8 go get github.com/astaxie/beego/session 9 10 11 ## What providers are supported? 12 13 As of now this session manager support memory, file, Redis and MySQL. 14 15 16 ## How to use it? 17 18 First you must import it 19 20 import ( 21 "github.com/astaxie/beego/session" 22 ) 23 24 Then in you web app init the global session manager 25 26 var globalSessions *session.Manager 27 28 * Use **memory** as provider: 29 30 func init() { 31 globalSessions, _ = session.NewManager("memory", `{"cookieName":"gosessionid","gclifetime":3600}`) 32 go globalSessions.GC() 33 } 34 35 * Use **file** as provider, the last param is the path where you want file to be stored: 36 37 func init() { 38 globalSessions, _ = session.NewManager("file",`{"cookieName":"gosessionid","gclifetime":3600,"ProviderConfig":"./tmp"}`) 39 go globalSessions.GC() 40 } 41 42 * Use **Redis** as provider, the last param is the Redis conn address,poolsize,password: 43 44 func init() { 45 globalSessions, _ = session.NewManager("redis", `{"cookieName":"gosessionid","gclifetime":3600,"ProviderConfig":"127.0.0.1:6379,100,astaxie"}`) 46 go globalSessions.GC() 47 } 48 49 * Use **MySQL** as provider, the last param is the DSN, learn more from [mysql](https://github.com/go-sql-driver/mysql#dsn-data-source-name): 50 51 func init() { 52 globalSessions, _ = session.NewManager( 53 "mysql", `{"cookieName":"gosessionid","gclifetime":3600,"ProviderConfig":"username:password@protocol(address)/dbname?param=value"}`) 54 go globalSessions.GC() 55 } 56 57 * Use **Cookie** as provider: 58 59 func init() { 60 globalSessions, _ = session.NewManager( 61 "cookie", `{"cookieName":"gosessionid","enableSetCookie":false,"gclifetime":3600,"ProviderConfig":"{\"cookieName\":\"gosessionid\",\"securityKey\":\"beegocookiehashkey\"}"}`) 62 go globalSessions.GC() 63 } 64 65 66 Finally in the handlerfunc you can use it like this 67 68 func login(w http.ResponseWriter, r *http.Request) { 69 sess := globalSessions.SessionStart(w, r) 70 defer sess.SessionRelease(w) 71 username := sess.Get("username") 72 fmt.Println(username) 73 if r.Method == "GET" { 74 t, _ := template.ParseFiles("login.gtpl") 75 t.Execute(w, nil) 76 } else { 77 fmt.Println("username:", r.Form["username"]) 78 sess.Set("username", r.Form["username"]) 79 fmt.Println("password:", r.Form["password"]) 80 } 81 } 82 83 84 ## How to write own provider? 85 86 When you develop a web app, maybe you want to write own provider because you must meet the requirements. 87 88 Writing a provider is easy. You only need to define two struct types 89 (Session and Provider), which satisfy the interface definition. 90 Maybe you will find the **memory** provider is a good example. 91 92 type SessionStore interface { 93 Set(key, value interface{}) error //set session value 94 Get(key interface{}) interface{} //get session value 95 Delete(key interface{}) error //delete session value 96 SessionID() string //back current sessionID 97 SessionRelease(w http.ResponseWriter) // release the resource & save data to provider & return the data 98 Flush() error //delete all data 99 } 100 101 type Provider interface { 102 SessionInit(gclifetime int64, config string) error 103 SessionRead(sid string) (SessionStore, error) 104 SessionExist(sid string) bool 105 SessionRegenerate(oldsid, sid string) (SessionStore, error) 106 SessionDestroy(sid string) error 107 SessionAll() int //get all active session 108 SessionGC() 109 } 110 111 112 ## LICENSE 113 114 BSD License http://creativecommons.org/licenses/BSD/