go echo框架使用gorilla/sessions

2019-03-22  本文已影响0人  louhangfei

参考echo官方教程

这里面有一个大坑。它是这么使用的。

import (
  "github.com/gorilla/sessions"
  "github.com/labstack/echo-contrib/session"
)
e := echo.New()
e.Use(session.Middleware(sessions.NewCookieStore([]byte("secret"))))

...

它同时使用了gorilla/sessionsecho-contrib/session。然而,github.com/labstack/echo-contrib/session这个地址已经是404了。隐约中感觉有问题。
在jenkins中集成发布的时候,各种报错,其中一个是它会去请求/echo/v4这个模块,但是实际上是请求不到的,导致报错了。
然后,我尝试把echo-contrib/session删除,只使用gorilla/sessions。发现也可以工作,而且不会去请求/echo/v4
具体使用方法与原先的session大同小异。

修改后只使用sessions模块

// 初始化
var store = sessions.NewCookieStore([]byte(config.SessionKey))

func SetSession(user model.User, c echo.Context){
    // 获取session
    sess ,_:= store.Get( c.Request() , sessionName)
    // 设置session有效期
    sess.Options = &sessions.Options{
        Path:     "/",
        MaxAge:   maxAge, // 以秒为单位
    }
    sess.Values["username"] = user.Username
    // 保存session
    sess.Save(c.Request(), c.Response())
}

原先使用session模块的用法


e.Use(session.Middleware(sessions.NewCookieStore([]byte("secret"))))

func SetSession(user model.User, c echo.Context){
    sess, _ := session.Get(sessionName, c)
    sess.Options = &sessions.Options{
        Path:     "/",
        MaxAge:   maxAge, // 以秒为单位
    }
    sess.Values["username"] = username
    sess.Save(c.Request(), c.Response())
 }
上一篇下一篇

猜你喜欢

热点阅读