From 6d3486e2a6dc05b8e5bfb4f2665e5d0a80dedbb8 Mon Sep 17 00:00:00 2001 From: slene Date: Tue, 14 May 2013 07:33:00 +0800 Subject: [PATCH] fix session file write bug --- session/sess_file.go | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/session/sess_file.go b/session/sess_file.go index 0994c83a..c3306b78 100644 --- a/session/sess_file.go +++ b/session/sess_file.go @@ -32,7 +32,6 @@ func (fs *FileSessionStore) Set(key, value interface{}) error { func (fs *FileSessionStore) Get(key interface{}) interface{} { fs.lock.RLock() defer fs.lock.RUnlock() - fs.updatecontent() if v, ok := fs.values[key]; ok { return v } else { @@ -58,13 +57,13 @@ func (fs *FileSessionStore) SessionRelease() { } func (fs *FileSessionStore) updatecontent() { - if len(fs.values) > 0 { - b, err := encodeGob(fs.values) - if err != nil { - return - } - fs.f.Write(b) + b, err := encodeGob(fs.values) + if err != nil { + return } + fs.f.Truncate(0) + fs.f.Seek(0, 0) + fs.f.Write(b) } type FileProvider struct { @@ -107,7 +106,7 @@ func (fp *FileProvider) SessionRead(sid string) (SessionStore, error) { } } f.Close() - f, err = os.Create(path.Join(fp.savePath, string(sid[0]), string(sid[1]), sid)) + 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} return ss, nil }