gpt4 book ai didi

golang gorilla/session 在检查 session 时得到 nil 值

转载 作者:IT王子 更新时间:2023-10-29 01:27:52 27 4
gpt4 key购买 nike

我已经将包导入为

import (
"github.com/gorilla/sessions"
"github.com/gorilla/mux"

//CORS
"github.com/rs/cors"
"github.com/justinas/alice"
)

定义store和main方法如下

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 文档中的描述创建并设置了 session 值

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)
}
}
}

现在如果我想用另一种方法获得这个 session 值,我每次都得到 nil。不知道我的代码出了什么问题。

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"])
}
}

最佳答案

您的 GetSession 函数有误。请将 session 变量更改为 session1

还要检查 session 值是否存在,最好这样做:

session, err := store.Get(r, ssid)
if err == nil {
if value, ok := session.Values["foo"].(string); ok {
session_data = value
}
}

关于golang gorilla/session 在检查 session 时得到 nil 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29512914/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com