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