Merge pull request #1539 from ysqi/develop
change get sessionID logic from cookie
This commit is contained in:
		
						commit
						ecc6bcba3f
					
				| @ -53,3 +53,44 @@ func TestCookie(t *testing.T) { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func TestDestorySessionCookie(t *testing.T) { | ||||||
|  | 	config := `{"cookieName":"gosessionid","enableSetCookie":true,"gclifetime":3600,"ProviderConfig":"{\"cookieName\":\"gosessionid\",\"securityKey\":\"beegocookiehashkey\"}"}` | ||||||
|  | 	globalSessions, err := NewManager("cookie", config) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatal("init cookie session err", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	r, _ := http.NewRequest("GET", "/", nil) | ||||||
|  | 	w := httptest.NewRecorder() | ||||||
|  | 	session, err := globalSessions.SessionStart(w, r) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatal("session start err,", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// request again ,will get same sesssion id . | ||||||
|  | 	r1, _ := http.NewRequest("GET", "/", nil) | ||||||
|  | 	r1.Header.Set("Cookie", w.Header().Get("Set-Cookie")) | ||||||
|  | 	w = httptest.NewRecorder() | ||||||
|  | 	newSession, err := globalSessions.SessionStart(w, r1) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatal("session start err,", err) | ||||||
|  | 	} | ||||||
|  | 	if newSession.SessionID() != session.SessionID() { | ||||||
|  | 		t.Fatal("get cookie session id is not the same again.") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// After destory session , will get a new session id . | ||||||
|  | 	globalSessions.SessionDestroy(w, r1) | ||||||
|  | 	r2, _ := http.NewRequest("GET", "/", nil) | ||||||
|  | 	r2.Header.Set("Cookie", w.Header().Get("Set-Cookie")) | ||||||
|  | 
 | ||||||
|  | 	w = httptest.NewRecorder() | ||||||
|  | 	newSession, err = globalSessions.SessionStart(w, r2) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatal("session start error") | ||||||
|  | 	} | ||||||
|  | 	if newSession.SessionID() == session.SessionID() { | ||||||
|  | 		t.Fatal("after destory session and reqeust again ,get cookie session id is same.") | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | |||||||
| @ -142,7 +142,7 @@ func NewManager(provideName, config string) (*Manager, error) { | |||||||
| // otherwise return an valid session id. | // otherwise return an valid session id. | ||||||
| func (manager *Manager) getSid(r *http.Request) (string, error) { | func (manager *Manager) getSid(r *http.Request) (string, error) { | ||||||
| 	cookie, errs := r.Cookie(manager.config.CookieName) | 	cookie, errs := r.Cookie(manager.config.CookieName) | ||||||
| 	if errs != nil || cookie.Value == "" { | 	if errs != nil || cookie.Value == "" || cookie.MaxAge < 0 { | ||||||
| 		errs := r.ParseForm() | 		errs := r.ParseForm() | ||||||
| 		if errs != nil { | 		if errs != nil { | ||||||
| 			return "", errs | 			return "", errs | ||||||
| @ -202,14 +202,17 @@ func (manager *Manager) SessionDestroy(w http.ResponseWriter, r *http.Request) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	manager.provider.SessionDestroy(cookie.Value) | 	manager.provider.SessionDestroy(cookie.Value) | ||||||
|  | 	if manager.config.EnableSetCookie { | ||||||
| 		expiration := time.Now() | 		expiration := time.Now() | ||||||
| 		cookie = &http.Cookie{Name: manager.config.CookieName, | 		cookie = &http.Cookie{Name: manager.config.CookieName, | ||||||
| 			Path:     "/", | 			Path:     "/", | ||||||
| 			HttpOnly: true, | 			HttpOnly: true, | ||||||
| 			Expires:  expiration, | 			Expires:  expiration, | ||||||
| 			MaxAge:   -1} | 			MaxAge:   -1} | ||||||
|  | 
 | ||||||
| 		http.SetCookie(w, cookie) | 		http.SetCookie(w, cookie) | ||||||
| 	} | 	} | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| // GetSessionStore Get SessionStore by its id. | // GetSessionStore Get SessionStore by its id. | ||||||
| func (manager *Manager) GetSessionStore(sid string) (sessions Store, err error) { | func (manager *Manager) GetSessionStore(sid string) (sessions Store, err error) { | ||||||
| @ -231,7 +234,7 @@ func (manager *Manager) SessionRegenerateID(w http.ResponseWriter, r *http.Reque | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	cookie, err := r.Cookie(manager.config.CookieName) | 	cookie, err := r.Cookie(manager.config.CookieName) | ||||||
| 	if err != nil && cookie.Value == "" { | 	if err != nil || cookie.Value == "" { | ||||||
| 		//delete old cookie | 		//delete old cookie | ||||||
| 		session, _ = manager.provider.SessionRead(sid) | 		session, _ = manager.provider.SessionRead(sid) | ||||||
| 		cookie = &http.Cookie{Name: manager.config.CookieName, | 		cookie = &http.Cookie{Name: manager.config.CookieName, | ||||||
| @ -252,7 +255,9 @@ func (manager *Manager) SessionRegenerateID(w http.ResponseWriter, r *http.Reque | |||||||
| 		cookie.MaxAge = manager.config.CookieLifeTime | 		cookie.MaxAge = manager.config.CookieLifeTime | ||||||
| 		cookie.Expires = time.Now().Add(time.Duration(manager.config.CookieLifeTime) * time.Second) | 		cookie.Expires = time.Now().Add(time.Duration(manager.config.CookieLifeTime) * time.Second) | ||||||
| 	} | 	} | ||||||
|  | 	if manager.config.EnableSetCookie { | ||||||
| 		http.SetCookie(w, cookie) | 		http.SetCookie(w, cookie) | ||||||
|  | 	} | ||||||
| 	r.AddCookie(cookie) | 	r.AddCookie(cookie) | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user