From 290a9d184de85e8979f4447484548e9069b8b112 Mon Sep 17 00:00:00 2001 From: knightmare shava Date: Fri, 1 Nov 2013 12:34:16 +0800 Subject: [PATCH 1/2] minor fix,if path does not include : --- config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.go b/config.go index c3c44f66..e044c9e3 100644 --- a/config.go +++ b/config.go @@ -185,7 +185,7 @@ func ParseConfig() (err error) { } sds := strings.Fields(sd) for _, v := range sds { - if url2fsmap := strings.SplitN(v, ":", 2); url2fsmap[1] != "" { + if url2fsmap := strings.SplitN(v, ":", 2); len(url2fsmap) == 2 { StaticDir["/"+url2fsmap[0]] = url2fsmap[1] } else { StaticDir["/"+url2fsmap[0]] = url2fsmap[0] From d835b0c80f329d5797138779e22fca329a3976d7 Mon Sep 17 00:00:00 2001 From: astaxie Date: Sat, 2 Nov 2013 00:16:10 +0800 Subject: [PATCH 2/2] fix #235 --- session/sess_file.go | 28 ++++++++++++++++++++++++++++ session/sess_mem.go | 4 ++++ session/sess_mysql.go | 11 +++++++++++ session/sess_redis.go | 6 ++++++ session/session.go | 5 +++++ 5 files changed, 54 insertions(+) diff --git a/session/sess_file.go b/session/sess_file.go index 955cc9e0..38e52af8 100644 --- a/session/sess_file.go +++ b/session/sess_file.go @@ -2,6 +2,7 @@ package session import ( "errors" + "fmt" "io" "io/ioutil" "os" @@ -131,6 +132,18 @@ func (fp *FileProvider) SessionGC() { filepath.Walk(fp.savePath, gcpath) } +func (fp *FileProvider) SessionAll() int { + a := &activeSession{} + err := filepath.Walk(fp.savePath, func(path string, f os.FileInfo, err error) error { + return a.visit(path, f, err) + }) + if err != nil { + fmt.Printf("filepath.Walk() returned %v\n", err) + return 0 + } + return a.total +} + func (fp *FileProvider) SessionRegenerate(oldsid, sid string) (SessionStore, error) { err := os.MkdirAll(path.Join(fp.savePath, string(oldsid[0]), string(oldsid[1])), 0777) if err != nil { @@ -193,6 +206,21 @@ func gcpath(path string, info os.FileInfo, err error) error { return nil } +type activeSession struct { + total int +} + +func (self *activeSession) visit(paths string, f os.FileInfo, err error) error { + if err != nil { + return err + } + if f.IsDir() { + return nil + } + self.total = self.total + 1 + return nil +} + func init() { Register("file", filepder) } diff --git a/session/sess_mem.go b/session/sess_mem.go index fd021dac..93cc7fc6 100644 --- a/session/sess_mem.go +++ b/session/sess_mem.go @@ -142,6 +142,10 @@ func (pder *MemProvider) SessionGC() { pder.lock.RUnlock() } +func (pder *MemProvider) SessionAll() int { + return pder.list.Len() +} + func (pder *MemProvider) SessionUpdate(sid string) error { pder.lock.Lock() defer pder.lock.Unlock() diff --git a/session/sess_mysql.go b/session/sess_mysql.go index f1af8564..9eff85ef 100644 --- a/session/sess_mysql.go +++ b/session/sess_mysql.go @@ -152,6 +152,17 @@ func (mp *MysqlProvider) SessionGC() { return } +func (mp *MysqlProvider) SessionAll() int { + c := mp.connectInit() + defer c.Close() + var total int + err := c.QueryRow("SELECT count(*) as num from session").Scan(&total) + if err != nil { + return 0 + } + return total +} + func init() { Register("mysql", mysqlpder) } diff --git a/session/sess_redis.go b/session/sess_redis.go index eb2e5120..b8cde175 100644 --- a/session/sess_redis.go +++ b/session/sess_redis.go @@ -128,6 +128,12 @@ func (rp *RedisProvider) SessionGC() { return } +//@todo +func (rp *RedisProvider) SessionAll() int { + + return 0 +} + func init() { Register("redis", redispder) } diff --git a/session/session.go b/session/session.go index 1ffc7aaf..9e795ee7 100644 --- a/session/session.go +++ b/session/session.go @@ -27,6 +27,7 @@ type Provider interface { SessionRead(sid string) (SessionStore, error) SessionRegenerate(oldsid, sid string) (SessionStore, error) SessionDestroy(sid string) error + SessionAll() int //get all active session SessionGC() } @@ -195,6 +196,10 @@ func (manager *Manager) SessionRegenerateId(w http.ResponseWriter, r *http.Reque return } +func (manager *Manager) GetActiveSession() int { + return manager.provider.SessionAll() +} + //remote_addr cruunixnano randdata func (manager *Manager) sessionId(r *http.Request) (sid string) {