From db06e954b5d1cb9bdcb05b3c809fbcb1e4a3cecc Mon Sep 17 00:00:00 2001 From: astaxie Date: Thu, 28 May 2015 12:04:19 +0800 Subject: [PATCH] fix the session memcache bug --- session/memcache/sess_memcache.go | 6 +++--- session/session.go | 12 ++++++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/session/memcache/sess_memcache.go b/session/memcache/sess_memcache.go index 24aecb82..bb33075a 100644 --- a/session/memcache/sess_memcache.go +++ b/session/memcache/sess_memcache.go @@ -129,8 +129,9 @@ func (rp *MemProvider) SessionRead(sid string) (session.SessionStore, error) { } } item, err := client.Get(sid) - if err != nil { - return nil, err + if err != nil && err == memcache.ErrCacheMiss { + rs := &MemcacheSessionStore{sid: sid, values: make(map[interface{}]interface{}), maxlifetime: rp.maxlifetime} + return rs, nil } var kv map[interface{}]interface{} if len(item.Value) == 0 { @@ -141,7 +142,6 @@ func (rp *MemProvider) SessionRead(sid string) (session.SessionStore, error) { return nil, err } } - rs := &MemcacheSessionStore{sid: sid, values: kv, maxlifetime: rp.maxlifetime} return rs, nil } diff --git a/session/session.go b/session/session.go index ffc08edc..f0895de1 100644 --- a/session/session.go +++ b/session/session.go @@ -143,12 +143,14 @@ func (manager *Manager) SessionStart(w http.ResponseWriter, r *http.Request) (se return nil, errs } session, err = manager.provider.SessionRead(sid) - cookie = &http.Cookie{Name: manager.config.CookieName, + cookie = &http.Cookie{ + Name: manager.config.CookieName, Value: url.QueryEscape(sid), Path: "/", HttpOnly: true, Secure: manager.isSecure(r), - Domain: manager.config.Domain} + Domain: manager.config.Domain, + } if manager.config.CookieLifeTime > 0 { cookie.MaxAge = manager.config.CookieLifeTime cookie.Expires = time.Now().Add(time.Duration(manager.config.CookieLifeTime) * time.Second) @@ -170,12 +172,14 @@ func (manager *Manager) SessionStart(w http.ResponseWriter, r *http.Request) (se return nil, err } session, err = manager.provider.SessionRead(sid) - cookie = &http.Cookie{Name: manager.config.CookieName, + cookie = &http.Cookie{ + Name: manager.config.CookieName, Value: url.QueryEscape(sid), Path: "/", HttpOnly: true, Secure: manager.isSecure(r), - Domain: manager.config.Domain} + Domain: manager.config.Domain, + } if manager.config.CookieLifeTime > 0 { cookie.MaxAge = manager.config.CookieLifeTime cookie.Expires = time.Now().Add(time.Duration(manager.config.CookieLifeTime) * time.Second)