mirror of
https://github.com/astaxie/beego.git
synced 2024-12-26 11:50:49 +00:00
fix #235
This commit is contained in:
parent
bc862e526d
commit
d835b0c80f
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user