I cannot get the value from the session this way, it is nil :
session := initSession(r) valWithOutType := session.Values[key]
Full code:
package main import ( "fmt" "github.com/gorilla/mux" "github.com/gorilla/sessions" "log" "net/http" ) func main() { rtr := mux.NewRouter() rtr.HandleFunc("/setSession", handler1).Methods("GET") rtr.HandleFunc("/getSession", handler2).Methods("GET") http.Handle("/", rtr) log.Println("Listening...") http.ListenAndServe(":3000", http.DefaultServeMux) } func handler1(w http.ResponseWriter, r *http.Request) { SetSessionValue(w, r, "key", "value") w.Write([]byte("setSession")) } func handler2(w http.ResponseWriter, r *http.Request) { w.Write([]byte("getSession")) value := GetSessionValue(w, r, "key") fmt.Println("value from session") fmt.Println(value) } var authKey = []byte("secret") // Authorization Key var encKey = []byte("encKey") // Encryption Key var store = sessions.NewCookieStore(authKey, encKey) func initSession(r *http.Request) *sessions.Session { store.Options = &sessions.Options{ MaxAge: 3600 * 1, // 1 hour HttpOnly: true, } session, err := store.Get(r, "golang_cookie") if err != nil { panic(err) } return session } func SetSessionValue(w http.ResponseWriter, r *http.Request, key, value string) { session := initSession(r) session.Values[key] = value fmt.Printf("set session with key %s and value %s\n", key, value) session.Save(r, w) } func GetSessionValue(w http.ResponseWriter, r *http.Request, key string) string { session := initSession(r) valWithOutType := session.Values[key] fmt.Printf("valWithOutType: %s\n", valWithOutType) value, ok := valWithOutType.(string) if !ok { fmt.Println("cannot get session value by key: " + key) } return value }
Conclusion:
myMac ~/forStack/session $ go run ./session.go 2015/01/30 16:47:26 Listening...
First, I open the url http://localhost:3000/setSession and get the output:
set session with key key and value value
Then I open the url http://localhost:3000/getSession and get the output:
valWithOutType: %!s(<nil>) cannot get session value by key: key value from session
Why is valWithOutType equal to zero even though I asked /setSession ?
Update
I changed the code according to @isza's answer, but the session value is still nil .
package main import ( "fmt" "github.com/gorilla/mux" "github.com/gorilla/sessions" "log" "net/http" ) func main() { rtr := mux.NewRouter() rtr.HandleFunc("/setSession", handler1).Methods("GET") rtr.HandleFunc("/getSession", handler2).Methods("GET") http.Handle("/", rtr) log.Println("Listening...") store.Options = &sessions.Options{ MaxAge: 3600 * 1, // 1 hour HttpOnly: true, Path: "/", // to match all requests } http.ListenAndServe(":3000", http.DefaultServeMux) } func handler1(w http.ResponseWriter, r *http.Request) { SetSessionValue(w, r, "key", "value") w.Write([]byte("setSession")) } func handler2(w http.ResponseWriter, r *http.Request) { w.Write([]byte("getSession")) value := GetSessionValue(w, r, "key") fmt.Println("value from session") fmt.Println(value) } var authKey = []byte("secret") // Authorization Key var encKey = []byte("encKey") // Encryption Key var store = sessions.NewCookieStore(authKey, encKey) func initSession(r *http.Request) *sessions.Session { session, err := store.Get(r, "golang_cookie") if err != nil { panic(err) } return session } func SetSessionValue(w http.ResponseWriter, r *http.Request, key, value string) { session := initSession(r) session.Values[key] = value fmt.Printf("set session with key %s and value %s\n", key, value) session.Save(r, w) } func GetSessionValue(w http.ResponseWriter, r *http.Request, key string) string { session := initSession(r) valWithOutType := session.Values[key] fmt.Printf("valWithOutType: %s\n", valWithOutType) value, ok := valWithOutType.(string) if !ok { fmt.Println("cannot get session value by key: " + key) } return value }