English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Análisis de uso de Cookie en el lenguaje Go

Este artículo expone el uso de cookies en el lenguaje Go. Lo compartimos con ustedes para que lo consulten, y los detalles son los siguientes:

El desarrollo web no puede evitar打交道 con cookies. La biblioteca http de Go también proporciona operaciones relacionadas con las cookies.

type Cookie struct {
  Name string
  Value string
  Path string
  Domain string
  Expires time.Time
  RawExpires string
  MaxAge int
  Secure bool
  HttpOnly bool
  Raw string
  Unparsed []string
}

El campo Name es el nombre de la cookie, Value es su valor, y el Path y Domain restantes son el rango de almacenamiento de la cookie. Expires es la hora de expiración de la cookie, si no se configura, esta es una cookie de sesión, es decir, útil para la sesión del navegador, y se eliminará la cookie una vez cerrado el navegador.

Establecer Cookie

cookie es un contenido de header, por lo tanto se puede usar el método Header de la respuesta para establecer cookie.

func setCookieHandler(w http.ResponseWriter, r *http.Request) {
    c1 := http.Cookie{
        Name: "first_cookie",
        Value: "vanyar",
        HttpOnly: true,
    }
    c2 := http.Cookie{
        Name: "second_cookie",
        Value: "noldor",
        HttpOnly: true,
    }
    w.Header().Set("Set-Cookie", c1.String())
    w.Header().Add("Set-Cookie", c2.String())
}

Aquí también se puede probar la diferencia entre los métodos Set y Add. Por supuesto, al igual que en la carga de archivos, Go también proporciona funciones de herramientas comunes.

http.SetCookie(w, &c1)
http.SetCookie(w, &c2)

El método SetCookie de http también puede establecer el cookie, por lo que no se necesita preocuparse por el orden de Set y Add, por supuesto, el segundo parámetro es un puntero a un objeto Cookie. Después de establecer el cookie, lo siguiente es necesitar leer el cookie.

Lectura de Cookie

Hay muchos métodos para leer el cookie, el cookie está encapsulado en el header, por supuesto, se puede procesar a través del método header.

func getCookieHandler(w http.ResponseWriter, r *http.Request) {
    h := r.Header["Cookie"]
    fmt.Fprintln(w, h)
}

También se puede usar el método Request sin utilizar el método Header:

func getCookieHandler(w http.ResponseWriter, r *http.Request) {
    c1, err := r.Cookie("first_cookie")
    if err != nil{
        fmt.Fprintln(w, "Cannot get cookie")
    }
    cs := r.Cookies()
    fmt.Fprintln(w, c1)
    fmt.Fprintln(w, cs)
}

Al acceder, se puede descubrir que r.Cookie devuelve el par clave-valor correspondiente al key, mientras que r.Cookies devuelve todos los pares clave-valor de todas las cookies.

Cookie y Mensaje

El papel del cookie es muy variado, generalmente se utilizan para registrar algunas información del cliente, y se utilizan para la verificación de inicio de sesión del usuario. Ahora necesitamos usar el cookie para realizar una pequeña característica---El mensaje. Generalmente después de que el usuario realiza una solicitud web, se devuelve los datos de respuesta, también se pueden establecer algunos mensajes para referirse al usuario.

func setMessageHandler(w http.ResponseWriter, r *http.Request) {
    msg := []byte("Hello World")
    c := http.Cookie{
        Name: "flash",
        Value:base64.URLEncoding.EncodeToString(msg),
    }
    http.SetCookie(w, &c)
}
func getMessageHandler(w http.ResponseWriter, r *http.Request) {
    c, err := r.Cookie("flash")
    if err != nil {
        if err == http.ErrNoCookie {
            fmt.Fprintln(w, "No message found")
        }
    } else {}}
        rc := http.Cookie{
            Name: "flash",
            MaxAge: -1,
            Expires:time.Unix(1, 0),
        }
        http.SetCookie(w, &rc)
        val, _ := base64.URLEncoding.DecodeString(c.Value)
        fmt.Fprintln(w, string(val))
    }
}

La función setMessageHandler es muy simple, es crear una instancia de cookie, luego escribir el mensaje en la cookie y devolverla al cliente.

getMessageHandler primero leerá el cookie con clave flash, si no lee el contenido, entonces significa que el mensaje no existe, de lo contrario, se creará otro cookie, configurando su tiempo de expiración aquí igual al borrado de cookie. Luego, devolverá el message leído al cliente. Completar la comunicación de mensajes.

Resumen

Hemos discutido la aplicación básica de cookies en Go. En el desarrollo web actual, la seguridad cibernética se valora cada vez más, por lo que la seguridad de las cookies también se ha convertido en un contenido que los usuarios preocupan. La encapsulación nativa de cookies en Go es bastante simple. La comunidad de Go ha desarrollado muchos 'ruedas', que implementan secure cookie, por ejemplo, gorilla/Biblioteca securecookie. En el desarrollo real, es posible utilizar algunas bibliotecas o paquetes de terceros para completar las funciones.

Espero que lo descrito en este artículo sea útil para la programación en lenguaje Go.

Declaración: El contenido de este artículo se obtiene de la red, es propiedad del autor original, el contenido se contribuye y carga de manera autónoma por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha realizado una edición humana y no asume ninguna responsabilidad legal relacionada. Si encuentra contenido sospechoso de infracción de derechos de autor, le invitamos a enviar un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, reemplace # con @ para denunciar y proporcione evidencia. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de infracción de derechos de autor.)

Te gustará