github.com/astaxie/beego@v1.12.3/session/sess_cookie_test.go (about) 1 // Copyright 2014 beego Author. All Rights Reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package session 16 17 import ( 18 "encoding/json" 19 "net/http" 20 "net/http/httptest" 21 "strings" 22 "testing" 23 ) 24 25 func TestCookie(t *testing.T) { 26 config := `{"cookieName":"gosessionid","enableSetCookie":false,"gclifetime":3600,"ProviderConfig":"{\"cookieName\":\"gosessionid\",\"securityKey\":\"beegocookiehashkey\"}"}` 27 conf := new(ManagerConfig) 28 if err := json.Unmarshal([]byte(config), conf); err != nil { 29 t.Fatal("json decode error", err) 30 } 31 globalSessions, err := NewManager("cookie", conf) 32 if err != nil { 33 t.Fatal("init cookie session err", err) 34 } 35 r, _ := http.NewRequest("GET", "/", nil) 36 w := httptest.NewRecorder() 37 sess, err := globalSessions.SessionStart(w, r) 38 if err != nil { 39 t.Fatal("set error,", err) 40 } 41 err = sess.Set("username", "astaxie") 42 if err != nil { 43 t.Fatal("set error,", err) 44 } 45 if username := sess.Get("username"); username != "astaxie" { 46 t.Fatal("get username error") 47 } 48 sess.SessionRelease(w) 49 if cookiestr := w.Header().Get("Set-Cookie"); cookiestr == "" { 50 t.Fatal("setcookie error") 51 } else { 52 parts := strings.Split(strings.TrimSpace(cookiestr), ";") 53 for k, v := range parts { 54 nameval := strings.Split(v, "=") 55 if k == 0 && nameval[0] != "gosessionid" { 56 t.Fatal("error") 57 } 58 } 59 } 60 } 61 62 func TestDestorySessionCookie(t *testing.T) { 63 config := `{"cookieName":"gosessionid","enableSetCookie":true,"gclifetime":3600,"ProviderConfig":"{\"cookieName\":\"gosessionid\",\"securityKey\":\"beegocookiehashkey\"}"}` 64 conf := new(ManagerConfig) 65 if err := json.Unmarshal([]byte(config), conf); err != nil { 66 t.Fatal("json decode error", err) 67 } 68 globalSessions, err := NewManager("cookie", conf) 69 if err != nil { 70 t.Fatal("init cookie session err", err) 71 } 72 73 r, _ := http.NewRequest("GET", "/", nil) 74 w := httptest.NewRecorder() 75 session, err := globalSessions.SessionStart(w, r) 76 if err != nil { 77 t.Fatal("session start err,", err) 78 } 79 80 // request again ,will get same sesssion id . 81 r1, _ := http.NewRequest("GET", "/", nil) 82 r1.Header.Set("Cookie", w.Header().Get("Set-Cookie")) 83 w = httptest.NewRecorder() 84 newSession, err := globalSessions.SessionStart(w, r1) 85 if err != nil { 86 t.Fatal("session start err,", err) 87 } 88 if newSession.SessionID() != session.SessionID() { 89 t.Fatal("get cookie session id is not the same again.") 90 } 91 92 // After destroy session , will get a new session id . 93 globalSessions.SessionDestroy(w, r1) 94 r2, _ := http.NewRequest("GET", "/", nil) 95 r2.Header.Set("Cookie", w.Header().Get("Set-Cookie")) 96 97 w = httptest.NewRecorder() 98 newSession, err = globalSessions.SessionStart(w, r2) 99 if err != nil { 100 t.Fatal("session start error") 101 } 102 if newSession.SessionID() == session.SessionID() { 103 t.Fatal("after destroy session and reqeust again ,get cookie session id is same.") 104 } 105 }