fix the session memcache bug
Showing
2 changed files
with
11 additions
and
7 deletions
| ... | @@ -129,8 +129,9 @@ func (rp *MemProvider) SessionRead(sid string) (session.SessionStore, error) { | ... | @@ -129,8 +129,9 @@ func (rp *MemProvider) SessionRead(sid string) (session.SessionStore, error) { |
| 129 | } | 129 | } |
| 130 | } | 130 | } |
| 131 | item, err := client.Get(sid) | 131 | item, err := client.Get(sid) |
| 132 | if err != nil { | 132 | if err != nil && err == memcache.ErrCacheMiss { |
| 133 | return nil, err | 133 | rs := &MemcacheSessionStore{sid: sid, values: make(map[interface{}]interface{}), maxlifetime: rp.maxlifetime} |
| 134 | return rs, nil | ||
| 134 | } | 135 | } |
| 135 | var kv map[interface{}]interface{} | 136 | var kv map[interface{}]interface{} |
| 136 | if len(item.Value) == 0 { | 137 | if len(item.Value) == 0 { |
| ... | @@ -141,7 +142,6 @@ func (rp *MemProvider) SessionRead(sid string) (session.SessionStore, error) { | ... | @@ -141,7 +142,6 @@ func (rp *MemProvider) SessionRead(sid string) (session.SessionStore, error) { |
| 141 | return nil, err | 142 | return nil, err |
| 142 | } | 143 | } |
| 143 | } | 144 | } |
| 144 | |||
| 145 | rs := &MemcacheSessionStore{sid: sid, values: kv, maxlifetime: rp.maxlifetime} | 145 | rs := &MemcacheSessionStore{sid: sid, values: kv, maxlifetime: rp.maxlifetime} |
| 146 | return rs, nil | 146 | return rs, nil |
| 147 | } | 147 | } | ... | ... |
| ... | @@ -143,12 +143,14 @@ func (manager *Manager) SessionStart(w http.ResponseWriter, r *http.Request) (se | ... | @@ -143,12 +143,14 @@ func (manager *Manager) SessionStart(w http.ResponseWriter, r *http.Request) (se |
| 143 | return nil, errs | 143 | return nil, errs |
| 144 | } | 144 | } |
| 145 | session, err = manager.provider.SessionRead(sid) | 145 | session, err = manager.provider.SessionRead(sid) |
| 146 | cookie = &http.Cookie{Name: manager.config.CookieName, | 146 | cookie = &http.Cookie{ |
| 147 | Name: manager.config.CookieName, | ||
| 147 | Value: url.QueryEscape(sid), | 148 | Value: url.QueryEscape(sid), |
| 148 | Path: "/", | 149 | Path: "/", |
| 149 | HttpOnly: true, | 150 | HttpOnly: true, |
| 150 | Secure: manager.isSecure(r), | 151 | Secure: manager.isSecure(r), |
| 151 | Domain: manager.config.Domain} | 152 | Domain: manager.config.Domain, |
| 153 | } | ||
| 152 | if manager.config.CookieLifeTime > 0 { | 154 | if manager.config.CookieLifeTime > 0 { |
| 153 | cookie.MaxAge = manager.config.CookieLifeTime | 155 | cookie.MaxAge = manager.config.CookieLifeTime |
| 154 | cookie.Expires = time.Now().Add(time.Duration(manager.config.CookieLifeTime) * time.Second) | 156 | 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 | ... | @@ -170,12 +172,14 @@ func (manager *Manager) SessionStart(w http.ResponseWriter, r *http.Request) (se |
| 170 | return nil, err | 172 | return nil, err |
| 171 | } | 173 | } |
| 172 | session, err = manager.provider.SessionRead(sid) | 174 | session, err = manager.provider.SessionRead(sid) |
| 173 | cookie = &http.Cookie{Name: manager.config.CookieName, | 175 | cookie = &http.Cookie{ |
| 176 | Name: manager.config.CookieName, | ||
| 174 | Value: url.QueryEscape(sid), | 177 | Value: url.QueryEscape(sid), |
| 175 | Path: "/", | 178 | Path: "/", |
| 176 | HttpOnly: true, | 179 | HttpOnly: true, |
| 177 | Secure: manager.isSecure(r), | 180 | Secure: manager.isSecure(r), |
| 178 | Domain: manager.config.Domain} | 181 | Domain: manager.config.Domain, |
| 182 | } | ||
| 179 | if manager.config.CookieLifeTime > 0 { | 183 | if manager.config.CookieLifeTime > 0 { |
| 180 | cookie.MaxAge = manager.config.CookieLifeTime | 184 | cookie.MaxAge = manager.config.CookieLifeTime |
| 181 | cookie.Expires = time.Now().Add(time.Duration(manager.config.CookieLifeTime) * time.Second) | 185 | cookie.Expires = time.Now().Add(time.Duration(manager.config.CookieLifeTime) * time.Second) | ... | ... |
-
Please register or sign in to post a comment