加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读