Commit 51ee1e77 authored by astaxie's avatar astaxie

beego: close the file when finish init

parent 986e91b7
......@@ -29,7 +29,6 @@ var (
// File session store
type FileSessionStore struct {
f *os.File
sid string
lock sync.RWMutex
values map[interface{}]interface{}
......@@ -77,14 +76,23 @@ func (fs *FileSessionStore) SessionID() string {
// Write file session to local file with Gob string
func (fs *FileSessionStore) SessionRelease(w http.ResponseWriter) {
defer fs.f.Close()
b, err := EncodeGob(fs.values)
if err != nil {
return
}
fs.f.Truncate(0)
fs.f.Seek(0, 0)
fs.f.Write(b)
_, err = os.Stat(path.Join(filepder.savePath, string(fs.sid[0]), string(fs.sid[1]), fs.sid))
var f *os.File
if err == nil {
f, err = os.OpenFile(path.Join(filepder.savePath, string(fs.sid[0]), string(fs.sid[1]), fs.sid), os.O_RDWR, 0777)
} else if os.IsNotExist(err) {
f, err = os.Create(path.Join(filepder.savePath, string(fs.sid[0]), string(fs.sid[1]), fs.sid))
} else {
return
}
f.Truncate(0)
f.Seek(0, 0)
f.Write(b)
f.Close()
}
// File session provider
......@@ -137,8 +145,7 @@ func (fp *FileProvider) SessionRead(sid string) (SessionStore, error) {
}
}
f.Close()
f, err = os.OpenFile(path.Join(fp.savePath, string(sid[0]), string(sid[1]), sid), os.O_WRONLY|os.O_CREATE, 0777)
ss := &FileSessionStore{f: f, sid: sid, values: kv}
ss := &FileSessionStore{sid: sid, values: kv}
return ss, nil
}
......@@ -235,9 +242,7 @@ func (fp *FileProvider) SessionRegenerate(oldsid, sid string) (SessionStore, err
return nil, err
}
}
newf, err = os.OpenFile(path.Join(fp.savePath, string(sid[0]), string(sid[1]), sid), os.O_WRONLY|os.O_CREATE, 0777)
ss := &FileSessionStore{f: newf, sid: sid, values: kv}
ss := &FileSessionStore{sid: sid, values: kv}
return ss, nil
}
......
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