golang gorilla / session在检查会话时获得了nil值
发布时间:2020-12-16 19:03:31 所属栏目:大数据 来源:网络整理
导读:我已经导入了包 import ( "github.com/gorilla/sessions" "github.com/gorilla/mux" //CORS "github.com/rs/cors" "github.com/justinas/alice" ) 并定义了商店和主要方法如下 var store = sessions.NewCookieStore([]byte("something-very-secret")) const
我已经导入了包
import ( "github.com/gorilla/sessions" "github.com/gorilla/mux" //CORS "github.com/rs/cors" "github.com/justinas/alice" ) 并定义了商店和主要方法如下 var store = sessions.NewCookieStore([]byte("something-very-secret")) const My_UI="http://localhost:3000" func init() { store.Options = &sessions.Options{ Path: "/",MaxAge: 3600 * 1,// 1 hour HttpOnly: true,} } var router = mux.NewRouter() //MUX Handeler //MAIN Function func main() { c := cors.New(cors.Options{ AllowedOrigins: []string{My_UI},}) router.HandleFunc("/submitted",Login) router.HandleFunc("/check",GetSession) http.Handle("/",router) chain := alice.New(c.Handler).Then(router) //CORS enable fmt.Println("server started at port 8080") http.ListenAndServe(":8080",chain) } 在我的方法中,我创建并设置会话值,如gorilla doc中所述 func Login(w http.ResponseWriter,r *http.Request) { fmt.Println("In login----------->") sess := GetCon() //get connection session defer sess.Close() //close session c := sess.DB("mydb").C("users") //collection-> select db table session1,_ := store.Get(r,"loginSession") //login session //parse json data form := LoginUser{} err := json.NewDecoder(r.Body).Decode(&form) if err !=nil { fmt.Println(err) } //get query data var result []Person errc1 := c.Find(bson.M{"email":form.Email,"password":form.Password}).All(&result) if errc1 != nil { js,err2 := json.Marshal("false") if err2 != nil{return} w.Header().Set("Content-Type","application/json") w.Write(js) } else { if len(result)==0 { if err2 != nil { return } w.Header().Set("Content-Type","application/json") w.Write(js) } else { fmt.Println("Success") session1.Values["foo"] = "bar" session1.Save(r,w) fmt.Println("saved",session1) js,err2 := json.Marshal(&result[0].Id) if err2 != nil {return} w.Header().Set("Content-Type","application/json") w.Write(js) } } } 现在,如果我想在另一种方法中获得此会话值,我每次都会得到nil.不知道我的代码出了什么问题. func GetSession(w http.ResponseWriter,r *http.Request) { session1,"loginSession") fmt.Println("Session in SessionHandler",session1) if session.Values["foo"] == nil { fmt.Println("not found",session.Values["foo"])) } else { fmt.Println("value",session.Values["foo"]) } }
你的GetSession函数出错了.请将会话变量更改为session1
另外要检查会话值是否更好,请按以下方式执行: session,err := store.Get(r,ssid) if err == nil { if value,ok := session.Values["foo"].(string); ok { session_data = value } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |