cookie通常用于在浏览器中保存一些小数据,例如客户标识、用户非铭感数据。注意别使用cookie保存隐私数据。
gin框架主要通过上下文对象提供的SetCookie和Cookie两个函数操作cookie.
1.设置cookie
后端设置cookie的值。
r.GET("/setCookie", func(c *gin.Context) {
// 设置cookie
c.SetCookie("cookie_name", "cookie_value", 3600, "/", "localhost", false, true)
/*
name cookie的名称
value cookie的值
maxAge int, 单位为秒
path cookie所在目录
domain string,域名
secure 是否智能通过https访问
httpOnly bool 是否允许通过js获取自己的cookie
*/
c.JSON(http.StatusOK, gin.H{
"message": "set cookie success.",
})
})
SetCookie函数定义:
func (c *Context) SetCookie(name, value string, maxAge int, path, domain string, secure, httpOnly bool)
参数说明:
| 参数名 | 类型 | 说明 |
|---|---|---|
| name | string | cookie名字 |
| value | string | cookie值 |
| maxAge | int | 有效时间,单位是秒,MaxAge=0 忽略MaxAge属性,MaxAge<0 相当于删除cookie, 通常可以设置-1代表删除,MaxAge>0 多少秒后cookie失效 |
| path | string | cookie路径 |
| domain | string | cookie作用域 |
| secure | bool | Secure=true,那么这个cookie只能用https协议发送给服务器 |
| httpOnly | bool | 设置HttpOnly=true的cookie不能被js获取到 |
2.读取cookie
后端通过cookie名称读取cookie的值。
r.GET("/getCookie", func(c *gin.Context) {
// 读取cookie,根据cookie名读取
cookie, err := c.Cookie("cookie_name")
if err != nil {
// 直接返回cookie值
c.JSON(http.StatusOK, gin.H{"message": "get cookie fail"})
return
}
c.JSON(http.StatusOK, gin.H{"cookie_name": cookie})
})
3.删除cookie
通过将cookie的MaxAge设置为-1, 达到删除cookie的目的。
r.GET("/delCookie", func(c *gin.Context) {
// 删除cookie, 设置cookie MaxAge设置为-1,表示删除cookie
c.SetCookie("cookie_name", "cookie_value", -1, "/", "localhost", false, true)
c.JSON(http.StatusOK, gin.H{
"message": "delete cookie success.",
})
})
4.完整示例
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
// 1.设置cookie
r.GET("/setCookie", func(c *gin.Context) {
// 设置cookie
c.SetCookie("cookie_name", "cookie_value", 3600, "/", "localhost", false, true)
/*
name cookie的名称
value cookie的值
maxAge int, 单位为秒
path cookie所在目录
domain string,域名
secure 是否智能通过https访问
httpOnly bool 是否允许通过js获取自己的cookie
*/
c.JSON(http.StatusOK, gin.H{
"message": "set cookie success.",
})
})
// 2.获取cookie
r.GET("/getCookie", func(c *gin.Context) {
// 读取cookie,根据cookie名读取
cookie, err := c.Cookie("cookie_name")
if err != nil {
// 直接返回cookie值
c.JSON(http.StatusOK, gin.H{"message": "get cookie fail"})
return
}
c.JSON(http.StatusOK, gin.H{"cookie_name": cookie})
})
// 3.删除cookie
r.GET("/delCookie", func(c *gin.Context) {
// 删除cookie, 设置cookie MaxAge设置为-1,表示删除cookie
c.SetCookie("cookie_name", "cookie_value", -1, "/", "localhost", false, true)
c.JSON(http.StatusOK, gin.H{
"message": "delete cookie success.",
})
})
r.Run(":8080")
}