db06e954 by astaxie

fix the session memcache bug

1 parent 3abd0179
...@@ -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)
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!