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 函数获取用户上传的文件。