dongyutan1703 2019-05-03 00:43
浏览 51
已采纳

从导出的程序包获取SessionStore时未设置大猩猩/会话cookie

I'm having an issue with gorilla/sessions. My sessions aren't being saved when sessions.NewCookieStore([]byte("veryprivatekey")) is from a different package/exported variable.

Here is what works:

What works

exampleproj/main.go

package main

import (
    "fmt"
    "github.com/gorilla/mux"
    "github.com/gorilla/sessions"
    "net/http"
)

var store *sessions.CookieStore
var cookie_name = "sess"


func main() {
    store = sessions.NewCookieStore([]byte("veryprivatekey"))
    router := mux.NewRouter()
    router.HandleFunc("/cookietest", cookietest)
    router.HandleFunc("/cookietest2", cookietest2)
    err := http.ListenAndServe(":8080", router)
    if err != nil {
        fmt.Print(err)
    }
}

var cookietest = func(w http.ResponseWriter, r *http.Request) {
    session, err := store.Get(r, cookie_name)
    if err != nil {
        fmt.Println(err)
    }
    session.Values["Stack"] = "Overflow"
    err = session.Save(r,w)
    if err != nil {
        fmt.Println(err)
    }
}

var cookietest2 = func(w http.ResponseWriter, r *http.Request) {
    session, err := store.Get(r, cookie_name)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println("Stack: ", session.Values["Stack"])
}

(open localhost:8080/cookietest and check that a cookie was created)

The issue

Here is some code where sessions.CookieStore is from another package:

exampleproj/main.go

package main

import (
    "expirements/example"
    "fmt"
    "github.com/gorilla/mux"
    "net/http"
)

var cookie_name = "sess"


func main() {
    router := mux.NewRouter()
    router.HandleFunc("/cookietest", cookietest)
    router.HandleFunc("/cookietest2", cookietest2)
    err := http.ListenAndServe(":8080", router)
    if err != nil {
        fmt.Print(err)
    }
}

var cookietest = func(w http.ResponseWriter, r *http.Request) {
    session, err := example.Store.Get(r, cookie_name)
    if err != nil {
        fmt.Println(err)
    }
    session.Values["Stack"] = "Overflow"
    err = session.Save(r,w)
    if err != nil {
        fmt.Println(err)
    }
}

var cookietest2 = func(w http.ResponseWriter, r *http.Request) {
    session, err := example.Store.Get(r, cookie_name)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println("Stack: ", session.Values["Stack"])
}

exampleproj/example/ex.go

package example

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

var Store *sessions.CookieStore

func init() {
    Store = sessions.NewCookieStore([]byte("veryprivatekey"))
    Store.Options = &sessions.Options{
        //Domain:   config.Host,
        //Path:     "/",
        MaxAge:   259200,
        Secure:   true,
        HttpOnly: true,
    }
}

func GetStore() *sessions.CookieStore {
    return Store
}

No cookies were set. I've also tried using GetStore() instead of example.Store, but that didn't work either. Am I supposed to declare a sessions.NewCookieStore for each package?

  • 写回答

1条回答 默认 最新

  • dragonfly9527 2019-05-06 21:23
    关注

    Solution is here - surprised I couldn't find more stackoverflow questions about this.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题