http-cookie

1. 背景

Http -- 无状态:每一个request请求都是独立且非关联的,为了建立起每个request请求之间的关联关系

2. 原理

cookie是保存在每个域(域由协议+IP/域名+端口三部分组成)下,cookie值是由服务端设置,然后接下的客户端每次当前域下的请求都会携带cookie

img

  • 设置和更新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 
", cookie)
   })
   // 启动web服务
   router.Run()
}
原文地址:https://www.cnblogs.com/2bjiujiu/p/15212757.html