Echo框架 Cookie处理
在 Go Echo框架中,我们可以通过 net/http 包的 Cookie 结构体初始化一个 cookie,然后通过 echo.Context 上下文对象的 SetCookie 函数往请求结果设置 cookie。
cookie通常用于在浏览器中保存一些小数据,例如客户标识、用户非铭感数据。注意别使用 cookie 保存隐私数据。
1. 设置 cookie
往客户设置一个 cookie 需要两个步骤:
- 初始化 http.Cookie 对象;
- 调用 SetCookie 函数设置 cookie 对象。
范例如下:
// Handler func(c echo.Context) (err error) { // 初始化cookie对象 cookie := new(http.Cookie) cookie.Name = "tizi-domain" cookie.Value = "tizi365.com" cookie.Path = "/" // cookie有效期为3600秒 cookie.MaxAge = 3600 // 设置cookie c.SetCookie(cookie) return c.String(http.StatusOK, "cookie操作") }
2. http.Cookie 结构体定义
系统结构体 http.Cookie 的定义如下:
type Cookie struct { Name string //cookie名字 Value string //cookie的值 Path string // [可选字段] cookie路径 Domain string // [可选字段] cookie作用域 Expires time.Time // [可选字段] cookie什么时候失效,需要设置一个具体的失效时间跟MaxAge字段二选一即可, // MaxAge=0 忽略MaxAge属性. // MaxAge<0 相当于删除cookie, 通常可以设置-1代表删除 // MaxAge>0 多少秒后cookie失效 MaxAge int // [可选字段] cookie有效期,单位是秒 Secure bool // [可选字段] cookie secure属性 HttpOnly bool // [可选字段] cookie http only属性 }
3. 读取 cookie
读取 cookie 主要通过 echo.Context 上下文对象的 Cookie 函数进行操作。
范例如下:
// Handler func(c echo.Context) (err error) { // 根据cookie名,获取cookie, cookie存在则返回http.Cookie结构体 cookie, err := c.Cookie("tizi-domain") if err != nil { return err } // 打印cookie名 fmt.Println(cookie.Name) // 打印cookie值 fmt.Println(cookie.Value) return c.String(http.StatusOK, "cookie操作") }
下面介绍如何一次性查询所有 cookie:
// Handler func(c echo.Context) (err error) { // 通过c.Cookies函数,查询所有cookie // 这里通过循环语句打印所有cookie的名字和值 for _, cookie := range c.Cookies() { fmt.Println(cookie.Name) fmt.Println(cookie.Value) } return c.String(http.StatusOK, "cookie操作") }
4. 删除 cookie
删除 cookie,本质上是通过设置 cookie 的过期时间,让 cookie 立刻失效。
范例如下:
// Handler func(c echo.Context) (err error) { // 初始化cookie对象 cookie := new(http.Cookie) // 删除cookie只需要设置cookie名字就可以 cookie.Name = "tizi-domain" // cookie有效期为-1秒,注意这里不能设置为0,否则不会删除cookie cookie.MaxAge = -1 // 设置cookie c.SetCookie(cookie) return c.String(http.StatusOK, "cookie操作") }
Go Echo框架的 session 处理是通过中间件实现的。session 是 web 框架中重要的组成部分。比如:我们处理用户登录时,就需要相关的 session 处理机制。使用session的关键步骤:导入依赖包、设置session中间件、读写session数据。