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