Cookie介绍
- HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分两次请求是否由同一个客户端发出
- Cookie就是解决HTTP协议无状态的方案之一,中文是小甜饼的意思
- Cookie实际上就是服务器保存在浏览器上的一段信息。浏览器有了Cookie之后,每次向服务器发送请求时都会同时将该信息发送给服务器,服务器收到请求后,就可以根据该信息处理请求
- Cookie由服务器创建,并发送给浏览器,最终由浏览器保存
Cookie的用途
- 测试服务端发送cookie给客户端,客户端请求时携带cookie
Cookie的使用
-
cookie的获取:
func (c *Context) Cookie(name string) (string, error)
Cookie 返回请求中提供的命名 cookie,如果未找到则返回 ErrNoCookie。并返回命名的 cookie 是未转义的。如果多个 cookie 与给定名称匹配,则只会返回一个 cookie。
- cookie的设置:
func (c *Context) SetCookie(name, value string, maxAge int, path, domain string, secure, httpOnly bool)
SetCookie 将 Set-Cookie 标头添加到 ResponseWriter 的标头中。提供的 cookie 必须具有有效的名称。无效的 cookie 可能会被静默丢弃。
参数:
name:cookie的名称
value:cookie的值
maxAge int:cookie存活时间,单位为秒
path:cookie所在目录
domain string:域名
secure:是否只能通过https访问
httpOnly bool :是否允许别人通过js获取自己的cookie
实例演示:
package main
import (
"fmt"
"github.com/gin-gonic/gin"
)
func TestHandler(c *gin.Context) {
// 获取客户端是否携带cookie
if cookie, err := c.Cookie("username"); err != nil {
fmt.Println("cookie", cookie)
fmt.Println("err", err)
cookie = "lucas"
// 给客户端设置cookie
c.SetCookie("username", cookie, 60*60, "/", "localhost", false, true)
fmt.Printf("cookie的值为:%v\n", cookie)
c.String(200, "测试cookie")
}
}
func main() {
// 1.创建路由
// 默认使用了2个中间件Logger(), Recovery()
engine := gin.Default()
engine.GET("/cookie", TestHandler)
engine.Run(":8888")
}
cookie
err http: named cookie not present
cookie的值为:lucas
[GIN] 2023/09/12 - 18:29:13 | 200 | 924.4µs | ::1 | GET "/cookie"
查看cookie