tôi đã nhập khẩu các gói nhưgolang khỉ đột/phiên có giá trị nil trong khi kiểm tra phiên
import (
"github.com/gorilla/sessions"
"github.com/gorilla/mux"
//CORS
"github.com/rs/cors"
"github.com/justinas/alice"
)
và xác định lưu trữ và phương pháp chính như sau
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)
}
Trong phương pháp của tôi, tôi đã tạo và thiết lập phiên giá trị như mô tả trong 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)
}
}
}
Bây giờ nếu tôi muốn nhận giá trị phiên này theo phương pháp khác tôi nhận được nil mỗi lần. không biết điều gì sai trong mã của tôi.
func GetSession(w http.ResponseWriter, r *http.Request) {
session1, _ := store.Get(r, "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"])
}
}
Bạn có kiểm tra lỗi? Có vẻ như bạn đang bỏ qua chúng trong mã ví dụ của bạn. Nếu tôi phải đoán, tôi muốn nói rằng bạn đã viết thư cho 'http.ResponseWriter' trước khi lưu phiên (tiêu đề được gửi). – seong
có, tôi đã kiểm tra. có giá trị nil -> "không tìm thấy" trong khi kiểm tra điều kiện cho phiên trong phương thức GetSession(). –
theo doc (gorilla) để lưu bất kỳ phiên nào mà chúng ta đã viết session.Save (r, w) .. và cho nhiều phiên họ đã đề cập đến sessions.Save (r, w). –