Echo框架 Cookie处理

在 Go Echo框架中,我们可以通过 net/http 包的 Cookie 结构体初始化一个 cookie,然后通过 echo.Context 上下文对象的 SetCookie 函数往请求结果设置 cookie。

cookie通常用于在浏览器中保存一些小数据,例如客户标识、用户非铭感数据。注意别使用 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操作")
}

系统结构体 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属性
}

读取 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操作")
}

删除 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操作")
}

下一章:Echo框架 Session处理

Go Echo框架的 session 处理是通过中间件实现的。session 是 web 框架中重要的组成部分。比如:我们处理用户登录时,就需要相关的 session 处理机制。使用session的关键步骤:导入依赖包、设置session中间件、读写session数据。