Commit d835b0c8 authored by astaxie's avatar astaxie

fix #235

parent bc862e52
......@@ -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)
}
......@@ -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()
......
......@@ -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)
}
......@@ -128,6 +128,12 @@ func (rp *RedisProvider) SessionGC() {
return
}
//@todo
func (rp *RedisProvider) SessionAll() int {
return 0
}
func init() {
Register("redis", redispder)
}
......@@ -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) {
......
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