fix #235
Showing
5 changed files
with
54 additions
and
0 deletions
| ... | @@ -2,6 +2,7 @@ package session | ... | @@ -2,6 +2,7 @@ package session |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "errors" | 4 | "errors" |
| 5 | "fmt" | ||
| 5 | "io" | 6 | "io" |
| 6 | "io/ioutil" | 7 | "io/ioutil" |
| 7 | "os" | 8 | "os" |
| ... | @@ -131,6 +132,18 @@ func (fp *FileProvider) SessionGC() { | ... | @@ -131,6 +132,18 @@ func (fp *FileProvider) SessionGC() { |
| 131 | filepath.Walk(fp.savePath, gcpath) | 132 | filepath.Walk(fp.savePath, gcpath) |
| 132 | } | 133 | } |
| 133 | 134 | ||
| 135 | func (fp *FileProvider) SessionAll() int { | ||
| 136 | a := &activeSession{} | ||
| 137 | err := filepath.Walk(fp.savePath, func(path string, f os.FileInfo, err error) error { | ||
| 138 | return a.visit(path, f, err) | ||
| 139 | }) | ||
| 140 | if err != nil { | ||
| 141 | fmt.Printf("filepath.Walk() returned %v\n", err) | ||
| 142 | return 0 | ||
| 143 | } | ||
| 144 | return a.total | ||
| 145 | } | ||
| 146 | |||
| 134 | func (fp *FileProvider) SessionRegenerate(oldsid, sid string) (SessionStore, error) { | 147 | func (fp *FileProvider) SessionRegenerate(oldsid, sid string) (SessionStore, error) { |
| 135 | err := os.MkdirAll(path.Join(fp.savePath, string(oldsid[0]), string(oldsid[1])), 0777) | 148 | err := os.MkdirAll(path.Join(fp.savePath, string(oldsid[0]), string(oldsid[1])), 0777) |
| 136 | if err != nil { | 149 | 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 { |
| 193 | return nil | 206 | return nil |
| 194 | } | 207 | } |
| 195 | 208 | ||
| 209 | type activeSession struct { | ||
| 210 | total int | ||
| 211 | } | ||
| 212 | |||
| 213 | func (self *activeSession) visit(paths string, f os.FileInfo, err error) error { | ||
| 214 | if err != nil { | ||
| 215 | return err | ||
| 216 | } | ||
| 217 | if f.IsDir() { | ||
| 218 | return nil | ||
| 219 | } | ||
| 220 | self.total = self.total + 1 | ||
| 221 | return nil | ||
| 222 | } | ||
| 223 | |||
| 196 | func init() { | 224 | func init() { |
| 197 | Register("file", filepder) | 225 | Register("file", filepder) |
| 198 | } | 226 | } | ... | ... |
| ... | @@ -142,6 +142,10 @@ func (pder *MemProvider) SessionGC() { | ... | @@ -142,6 +142,10 @@ func (pder *MemProvider) SessionGC() { |
| 142 | pder.lock.RUnlock() | 142 | pder.lock.RUnlock() |
| 143 | } | 143 | } |
| 144 | 144 | ||
| 145 | func (pder *MemProvider) SessionAll() int { | ||
| 146 | return pder.list.Len() | ||
| 147 | } | ||
| 148 | |||
| 145 | func (pder *MemProvider) SessionUpdate(sid string) error { | 149 | func (pder *MemProvider) SessionUpdate(sid string) error { |
| 146 | pder.lock.Lock() | 150 | pder.lock.Lock() |
| 147 | defer pder.lock.Unlock() | 151 | defer pder.lock.Unlock() | ... | ... |
| ... | @@ -152,6 +152,17 @@ func (mp *MysqlProvider) SessionGC() { | ... | @@ -152,6 +152,17 @@ func (mp *MysqlProvider) SessionGC() { |
| 152 | return | 152 | return |
| 153 | } | 153 | } |
| 154 | 154 | ||
| 155 | func (mp *MysqlProvider) SessionAll() int { | ||
| 156 | c := mp.connectInit() | ||
| 157 | defer c.Close() | ||
| 158 | var total int | ||
| 159 | err := c.QueryRow("SELECT count(*) as num from session").Scan(&total) | ||
| 160 | if err != nil { | ||
| 161 | return 0 | ||
| 162 | } | ||
| 163 | return total | ||
| 164 | } | ||
| 165 | |||
| 155 | func init() { | 166 | func init() { |
| 156 | Register("mysql", mysqlpder) | 167 | Register("mysql", mysqlpder) |
| 157 | } | 168 | } | ... | ... |
| ... | @@ -128,6 +128,12 @@ func (rp *RedisProvider) SessionGC() { | ... | @@ -128,6 +128,12 @@ func (rp *RedisProvider) SessionGC() { |
| 128 | return | 128 | return |
| 129 | } | 129 | } |
| 130 | 130 | ||
| 131 | //@todo | ||
| 132 | func (rp *RedisProvider) SessionAll() int { | ||
| 133 | |||
| 134 | return 0 | ||
| 135 | } | ||
| 136 | |||
| 131 | func init() { | 137 | func init() { |
| 132 | Register("redis", redispder) | 138 | Register("redis", redispder) |
| 133 | } | 139 | } | ... | ... |
| ... | @@ -27,6 +27,7 @@ type Provider interface { | ... | @@ -27,6 +27,7 @@ type Provider interface { |
| 27 | SessionRead(sid string) (SessionStore, error) | 27 | SessionRead(sid string) (SessionStore, error) |
| 28 | SessionRegenerate(oldsid, sid string) (SessionStore, error) | 28 | SessionRegenerate(oldsid, sid string) (SessionStore, error) |
| 29 | SessionDestroy(sid string) error | 29 | SessionDestroy(sid string) error |
| 30 | SessionAll() int //get all active session | ||
| 30 | SessionGC() | 31 | SessionGC() |
| 31 | } | 32 | } |
| 32 | 33 | ||
| ... | @@ -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 |
| 195 | return | 196 | return |
| 196 | } | 197 | } |
| 197 | 198 | ||
| 199 | func (manager *Manager) GetActiveSession() int { | ||
| 200 | return manager.provider.SessionAll() | ||
| 201 | } | ||
| 202 | |||
| 198 | //remote_addr cruunixnano randdata | 203 | //remote_addr cruunixnano randdata |
| 199 | 204 | ||
| 200 | func (manager *Manager) sessionId(r *http.Request) (sid string) { | 205 | func (manager *Manager) sessionId(r *http.Request) (sid string) { | ... | ... |
-
Please register or sign in to post a comment