1. 背景
Http -- 无状态:每一个request请求都是独立且非关联的,为了建立起每个request请求之间的关联关系
2. 原理
cookie是保存在每个域(域由协议+IP/域名+端口三部分组成)下,cookie值是由服务端设置,然后接下的客户端每次当前域下的请求都会携带cookie
- 设置和更新cookie是服务端的行为,请求携带cookie是客户端行为,cookie是缓存在客户端
3. Cookie属性
- 过期时间
1. max-age -- 指定当前cookie多少秒后过期
2. expire -- 指定某个时间点后cookie过期
- 禁止
document.cookie
访问 cookie --httpOnly
4. Cookie机制
1. cookie数据结构
Cookie: "k=v,max-age=1000;k2=v2"
值使用key=value形式,多个键值之间使用分号隔开,key=value的属性使用逗号隔开
5. Demo
package main
import (
"fmt"
"github.com/gin-gonic/gin"
)
func main() {
// 获取Engine示例
router := gin.Default()
// 设置路由
router.GET("/cookie", func(c *gin.Context) {
// 获取cookie值
cookie, err := c.Cookie("gin_cookie")
if err != nil {
cookie = "NotSet"
// 设置cookie
c.SetCookie("gin_cookie", "test", 3600, "/", "localhost", false,
true)
}
fmt.Printf("Cookie value: %s \n", cookie)
})
// 启动web服务
router.Run()
}