Echo框架 Session处理

Go Echo框架的 session 处理是通过中间件实现的。session 是 web 框架中重要的组成部分。比如:我们处理用户登录时,就需要相关的 session 处理机制。

使用 session 的关键步骤:

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

 

1. 导入依赖包

导入 session 包之前先安装依赖包:

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

导入 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 数据

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

1)用户登录并记录会话数据的范例

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

e.POST("/login", func(c echo.Context) error {
    // 获取登录请求参数
    username := c.FormValue("username")
    password := c.FormValue("password")
	
	// 校验帐号密码是否正确	
    if username == "codebaoku" && 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, "密码不正确!")
	}
})

2)获取用户会话数据

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

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

使用 Go Echo框架处理上传文件时,我们需要在控制器(controller)中通过 echo.Context 上下文对象的 FormFile 函数获取用户上传的文件。