一架梯子,一头程序猿,仰望星空!

golang echo 如何处理cookie


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