Introducción de cookies
- HTTP es un protocolo sin estado: el servidor no puede registrar el estado de acceso del navegador, lo que significa que el servidor no puede distinguir si dos solicitudes son emitidas por el mismo cliente.
- La cookie es una de las soluciones a la apatridia del protocolo HTTP. En chino significa cookie.
- Una cookie es en realidad una pieza de información almacenada en el navegador por el servidor. Después de que el navegador tiene una cookie, esta información se enviará al servidor cada vez que envíe una solicitud al servidor. Una vez que el servidor recibe la solicitud, puede procesar la solicitud en función de esta información.
- Las cookies son creadas por el servidor, enviadas al navegador y, finalmente, guardadas por el navegador.
Para qué se utilizan las cookies
- El servidor de prueba envía una cookie al cliente y el cliente porta la cookie cuando realiza una solicitud.
Uso de cookies
-
Obtención de cookies :
func (c *Context) Cookie(name string) (string, error)
Cookie devuelve la cookie nombrada proporcionada en la solicitud, o ErrNoCookie si no se encuentra. Y devuelve la cookie nombrada sin escape. Si varias cookies coinciden con el nombre indicado, solo se devolverá una cookie.
- Configuración de cookies :
func (c *Context) SetCookie(name, value string, maxAge int, path, domain string, secure, httpOnly bool)
SetCookie Agrega el encabezado Set-Cookie a los encabezados de ResponseWriter . La cookie proporcionada debe tener un nombre válido. Las cookies no válidas pueden descartarse silenciosamente.
parámetro:
nombre: el nombre de la cookie
valor: valor de la cookie
maxAge int: tiempo de supervivencia de las cookies, la unidad es segundos
ruta: el directorio donde se encuentra la cookie
cadena de dominio: nombre de dominio
seguro: si solo se puede acceder a través de https
httpOnly bool: si se debe permitir que otros obtengan sus propias cookies a través de js
Ejemplo de demostración :
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"
Ver cookies