【问题标题】:Gorilla/sessions cookie not being set when SessionStore is from exported package当 SessionStore 来自导出的包时,没有设置 Gorilla/sessions cookie
【发布时间】:2019-05-07 05:23:28
【问题描述】:

我遇到了gorilla/sessions 的问题。当sessions.NewCookieStore([]byte("veryprivatekey")) 来自不同的包/导出变量时,我的会话没有被保存。

以下是有效的:

什么有效

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

(打开 localhost:8080/cookietest 并检查是否创建了 cookie)

问题

这是一些代码,其中sessions.CookieStore 来自另一个包:

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
}

没有设置 cookie。我也尝试过使用GetStore() 而不是example.Store,但这也不起作用。我应该为每个包声明一个sessions.NewCookieStore 吗?

【问题讨论】:

  • 为什么在第二个示例中更改 Store.Options 而不是在第一个示例中更改?如果你不改变它们怎么办?

标签: go gorilla


【解决方案1】:

解决方案是 here - 很惊讶我找不到更多关于此的 stackoverflow 问题。

【讨论】:

    猜你喜欢
    • 2015-10-30
    • 2013-12-23
    • 2015-04-21
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 2014-04-16
    • 2019-05-30
    • 2014-11-07
    相关资源
    最近更新 更多