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

Analisi dell'uso dei cookie in Go

Questo articolo illustra l'uso dei cookie nel linguaggio Go. Condivido questo con tutti voi per riferimento, come segue:

Lo sviluppo web non può fare a meno di interagire con i cookie. La libreria http di Go fornisce anche operazioni relative ai cookie.

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
}

Il campo Name è il nome del cookie, il Value è il suo valore, mentre Path e Domain sono l'intervallo di memorizzazione del cookie. Expires è la data di scadenza del cookie, se non impostato, è un cookie di sessione, ossia utile per la sessione del browser, che viene eliminato una volta chiuso il browser.

Impostazione Cookie

Il cookie è un contenuto di header, quindi può essere impostato utilizzando il metodo Header della reponse.

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())
}

Qui si può anche testare la differenza tra i metodi Set e Add. Naturalmente, come per l'upload dei file, Go fornisce funzioni di utilità comuni.

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

Il metodo SetCookie di http può anche impostare i cookie, quindi non c'è bisogno di preoccuparsi dell'ordine di Set e Add, ovviamente il secondo parametro è un puntatore a un oggetto Cookie. Dopo aver impostato i cookie, il passo successivo è leggere i cookie.

Leggi Cookie

Ci sono molti modi per leggere i cookie, i cookie sono encapsulati nel header, ovviamente possono essere gestiti tramite il metodo header.

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

Non è necessario utilizzare il metodo Header, può anche utilizzare il metodo Request:

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

Durante l'accesso, si può notare che r.Cookie restituisce il valore della coppia di chiave per key, mentre r.Cookies restituisce il valore delle coppie di chiave di tutti i cookie.

Cookie e Messaggio

Il cookie ha molte funzioni, di solito registra alcune informazioni del client, utilizzate per la verifica dell'autenticazione dell'utente. Ora dobbiamo utilizzare il cookie per fare una piccola funzionalità - messaggio. Di solito dopo che la richiesta web è stata inviata, la risposta restituisce i dati, ma può anche impostare alcuni messaggi per guidare l'utente.

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, "Non trovato messaggio")
        }
    } 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 funzione setMessageHandler è molto semplice, crea un'istanza di cookie, scrive il messaggio nel cookie e poi lo restituisce al client.

getMessageHandler legge prima il cookie con key flash, se non legge il contenuto, significa che il messaggio non esiste, altrimenti crea un altro cookie, imposta la data di scadenza qui uguale a cancellare il cookie. Poi restituisce il messaggio letto al client. Completare la comunicazione del messaggio.

Conclusione

Abbiamo discusso dell'applicazione di base dei cookie in Go. Negli sviluppi web attuali, la sicurezza della rete è sempre più importante, quindi la sicurezza dei cookie è anche un contenuto di preoccupazione degli utenti. L'incapsulamento dei cookie nativi di Go è piuttosto semplice. La comunità di Go ha sviluppato molti wheel, implementando cookie sicuri, ad esempio la libreria gorilla/securecookie. Durante lo sviluppo reale, potrebbe essere necessario utilizzare alcune librerie o pacchetti di terze parti per completare le funzioni.

Spero che l'articolo descritto possa essere di aiuto a tutti nella progettazione di programmi Go.

Dichiarazione: il contenuto di questo articolo è stato raccolto da Internet, il copyright è della proprietà del rispettivo autore, il contenuto è stato caricato autonomamente dagli utenti di Internet, il sito web non detiene il diritto di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare e fornire prove pertinenti. Una volta verificata, il sito eliminerà immediatamente il contenuto sospetto di violazione del copyright.

Ti potrebbe interessare