Commit d835b0c8 authored by astaxie's avatar astaxie

fix #235

parent bc862e52
...@@ -2,6 +2,7 @@ package session ...@@ -2,6 +2,7 @@ package session
import ( import (
"errors" "errors"
"fmt"
"io" "io"
"io/ioutil" "io/ioutil"
"os" "os"
...@@ -131,6 +132,18 @@ func (fp *FileProvider) SessionGC() { ...@@ -131,6 +132,18 @@ func (fp *FileProvider) SessionGC() {
filepath.Walk(fp.savePath, gcpath) 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) { func (fp *FileProvider) SessionRegenerate(oldsid, sid string) (SessionStore, error) {
err := os.MkdirAll(path.Join(fp.savePath, string(oldsid[0]), string(oldsid[1])), 0777) err := os.MkdirAll(path.Join(fp.savePath, string(oldsid[0]), string(oldsid[1])), 0777)
if err != nil { if err != nil {
...@@ -193,6 +206,21 @@ func gcpath(path string, info os.FileInfo, err error) error { ...@@ -193,6 +206,21 @@ func gcpath(path string, info os.FileInfo, err error) error {
return nil 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() { func init() {
Register("file", filepder) Register("file", filepder)
} }
...@@ -142,6 +142,10 @@ func (pder *MemProvider) SessionGC() { ...@@ -142,6 +142,10 @@ func (pder *MemProvider) SessionGC() {
pder.lock.RUnlock() pder.lock.RUnlock()
} }
func (pder *MemProvider) SessionAll() int {
return pder.list.Len()
}
func (pder *MemProvider) SessionUpdate(sid string) error { func (pder *MemProvider) SessionUpdate(sid string) error {
pder.lock.Lock() pder.lock.Lock()
defer pder.lock.Unlock() defer pder.lock.Unlock()
......
...@@ -152,6 +152,17 @@ func (mp *MysqlProvider) SessionGC() { ...@@ -152,6 +152,17 @@ func (mp *MysqlProvider) SessionGC() {
return 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() { func init() {
Register("mysql", mysqlpder) Register("mysql", mysqlpder)
} }
...@@ -128,6 +128,12 @@ func (rp *RedisProvider) SessionGC() { ...@@ -128,6 +128,12 @@ func (rp *RedisProvider) SessionGC() {
return return
} }
//@todo
func (rp *RedisProvider) SessionAll() int {
return 0
}
func init() { func init() {
Register("redis", redispder) Register("redis", redispder)
} }
...@@ -27,6 +27,7 @@ type Provider interface { ...@@ -27,6 +27,7 @@ type Provider interface {
SessionRead(sid string) (SessionStore, error) SessionRead(sid string) (SessionStore, error)
SessionRegenerate(oldsid, sid string) (SessionStore, error) SessionRegenerate(oldsid, sid string) (SessionStore, error)
SessionDestroy(sid string) error SessionDestroy(sid string) error
SessionAll() int //get all active session
SessionGC() SessionGC()
} }
...@@ -195,6 +196,10 @@ func (manager *Manager) SessionRegenerateId(w http.ResponseWriter, r *http.Reque ...@@ -195,6 +196,10 @@ func (manager *Manager) SessionRegenerateId(w http.ResponseWriter, r *http.Reque
return return
} }
func (manager *Manager) GetActiveSession() int {
return manager.provider.SessionAll()
}
//remote_addr cruunixnano randdata //remote_addr cruunixnano randdata
func (manager *Manager) sessionId(r *http.Request) (sid string) { func (manager *Manager) sessionId(r *http.Request) (sid string) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment