golang echo如何处理session

24天以前  |  阅读数:27 次  |     收藏

如果我们需要处理用户登录会话,就需要相关的session处理机制,echo框架的session处理是通过中间件实现的。

使用session的关键步骤:

  • 导入依赖包
  • 设置session中间件
  • 读写session数据

1.导入依赖包

导入包之前先安装依赖包

go get github.com/gorilla/sessions
go get github.com/labstack/echo-contrib/session

导入包:

import (
  "github.com/gorilla/sessions"
  "github.com/labstack/echo-contrib/session"
)

2.设置session中间件

//初始化echo实例
e := echo.New()

//设置session数据保存目录
sessionPath := "./session_data"

//设置cookie加密秘钥, 可以随意设置
sessionKey = "Onxuh20a2ihhh2"

//设置session中间件
//这里使用的session中间件,session数据保存在指定的目录
e.Use(session.Middleware(sessions.NewFilesystemStore(sessionPath, []byte(sessionKey))))

3.读写session数据

下面以网站用户登录为例子介绍如何保存会话数据和读取会话数据。

3.1.用户登录并记录会话数据的例子

这里忽略html登录页面部分,下面直接描述控制器代码大概怎么写。

e.POST("/login", func(c echo.Context) error {
    //获取登录请求参数
    username := c.FormValue("username")
    password := c.FormValue("password")

    //校验帐号密码是否正确    
    if username == "tizi365" && password == "123456" {
        //密码正确, 下面开始注册用户会话数据
        //以user_session作为会话名字,获取一个session对象
        sess, _ := session.Get("user_session", c)

        //设置会话参数
        sess.Options = &sessions.Options{
            Path:     "/",  //所有页面都可以访问会话数据
            MaxAge:   86400 * 7,   //会话有效期,单位秒
        }

        //记录会话数据, sess.Values 是map类型,可以记录多个会话数据
        sess.Values["id"] = username
        sess.Values["isLogin"] = true

        //保存用户会话数据
        sess.Save(c.Request(), c.Response())

        return c.String(200, "登录成功!")
    } else {
        return c.String(200, "密码不正确!")
    }
})

3.2.获取用户会话数据

3.1.登录成功后,可以通过下面的方式读取用户会话数据

e.POST("/home", func(c echo.Context) error {
    //以user_session作为会话名字,获取一个session对象
    //注意这里的session名字,必须跟登录注册的会话名字一致
    sess, _ := session.Get("user_session", c)

    //通过sess.Values读取会话数据
    username := sess.Values["id"]
    isLogin  := sess.Values["isLogin"]

    //打印会话数据
    fmt.Println(username)
    fmt.Println(isLogin)
})

相关文章:


golang echo如何处理session