Echo会话中间件不保存

问题描述 投票:1回答:1

我正在尝试使用sessions middleware作为echo web framework。中间件基本上只是gorilla/sessions的包装器,专为与echo配合使用而设计。

我基本上只是复制了文档中给出的示例并略微扩展了它。


e := echo.New()
e.Use(session.Middleware(sessions.NewCookieStore([]byte("Secret"))))

// Add the name "Steve" to the session
e.GET("/login", func(c echo.Context) error {
        sess, err := session.Get("session", c)
        if err != nil {
            return err
        }
        sess.Options = &sessions.Options{
            Path:     "/",
            MaxAge:   0,
            HttpOnly: false,
            Secure:   true,
        }
        sess.Values["name"] = "Steve"
        sess.Save(c.Request(), c.Response())
        return c.NoContent(http.StatusOK)
    })

    // Reply with the name saved in the session
    e.GET("/whoami", func(c echo.Context) error {
        sess, err := session.Get("session", c)
        if err != nil {
            return err
        }

        return c.JSON(http.StatusOK, sess.Values["name"])
    })

我希望首先访问/login将名称保存到会话中,然后访问/whoami并获得名称"Steve"

/login按预期返回StatusOK,但/whoami总是返回null。为什么名称没有保存到会话中?

session go gorilla go-echo
1个回答
0
投票

问题是由设置session.Option.Secure = true引起的。

我正在本地测试而不使用HTTPS因此没有设置cookie。

© www.soinside.com 2019 - 2024. All rights reserved.