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

Go语言Cookie用法分析

Dieser Artikel zeigt die Verwendung von Cookies in der Programmiersprache Go. Hier ist eine Zusammenstellung für alle zur Verfügung gestellt, wie folgt:

Webentwicklung kann nicht ohne die Interaktion mit Cookies auskommen. Die http-Bibliothek von Go bietet auch Operationen für 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
}

Das Feld Name ist der Name des Cookies, Value ist sein Wert, der Rest ist der Speicherbereich des Cookies, bestehend aus Path und Domain. Expires ist das Ablaufdatum des Cookies, wird nicht gesetzt, dann ist es ein session-basierter Cookie, d.h. der Cookie ist nur während der Browser-Sitzung gültig und wird gelöscht, wenn der Browser geschlossen wird.

Cookie setzen

cookie ist ein Inhalt des Headers, daher kann die Header-Methode der Response verwendet werden, um den Cookie zu setzen.

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

Hier kann auch der Unterschied zwischen den Methoden Set und Add getestet werden. Natürlich bietet Go, wie auch bei der Dateiupload,常用的工具函数。

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

Die SetCookie-Methode von http kann auch Cookies setzen, daher ist es nicht notwendig, die Reihenfolge von Set und Add zu beachten, natürlich ist der zweite Parameter ein Zeiger auf ein Cookie-Objekt. Nachdem das Cookie gesetzt wurde, müssen Sie das Cookie lesen.

Lesen von Cookies

Es gibt viele Möglichkeiten, Cookies zu lesen, sie sind in Header verpackt, natürlich können sie auch durch Header-Methode behandelt werden.

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

Man kann Header-Methode nicht verwenden, sondern auch Methoden von Request verwenden:

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

Wenn Sie die Seite besuchen, können Sie feststellen, dass r.Cookie das Paar Schlüssel-Wert für den Schlüssel zurückgibt, während r.Cookies das Paar Schlüssel-Wert für alle Cookies zurückgibt.

Cookie und Nachricht

Cookies haben viele Funktionen, sie werden normalerweise verwendet, um einige Informationen des Clients zu protokollieren, um die Benutzeranmeldung zu validieren. Jetzt müssen wir Cookies verwenden, um eine kleine Funktion zu implementieren---Nachricht. Oftens wird nach dem Absenden einer Web-Anfrage die Antwortdaten zurückgegeben, und einige Nachrichten können auch zur Benutzerreferenzierung festgelegt werden.

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, "Keine Nachricht gefunden")
        }
    } 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))
    }
}

Die Funktion setMessageHandler ist sehr einfach, sie erstellt eine Cookie-Instanz, schreibt die Nachricht in das Cookie und gibt es dann an den Client zurück.

getMessageHandler liest zunächst den Cookie mit dem Schlüssel 'flash' aus. Wenn der Inhalt nicht gelesen werden kann, bedeutet dies, dass die Nachricht nicht existiert, andernfalls wird ein weiterer Cookie erstellt, dessen Ablaufzeit hier gleich dem Löschen des Cookies gesetzt wird. Anschließend wird die gelesene Nachricht an den Client zurückgegeben und die Nachrichtenkommunikation wird abgeschlossen.

Zusammenfassung

Wir haben die grundlegende Anwendung von Cookies in Go diskutiert. Heute wird in der Web-Entwicklung immer mehr Wert auf die Sicherheit des Netzwerks gelegt, daher wird auch die Sicherheit von Cookies zu einem Thema, das von den Benutzern beachtet wird. Die native Cookie-Abwicklung in Go ist relativ einfach. Die Community hat jedoch viele Wiederverwendbare Komponenten entwickelt, um sicherere Cookies zu implementieren, z.B. gorilla/Bibliothek securecookie. Bei der tatsächlichen Entwicklung können einige Drittanbieter-Bibliotheken oder -Pakete zur Erreichung von Funktionen eingesetzt werden.

Ich hoffe, dass dieser Artikel allen bei der Programmentwicklung in der Go-Sprache helfen wird.

Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet übernommen und gehört dem jeweiligen Urheber. Der Inhalt wurde von Internetnutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht von Hand bearbeitet. Sollten Sie verdächtige urheberrechtliche Inhalte feststellen, sind Sie herzlich eingeladen, eine E-Mail an notice#w zu senden.3codebox.com (Bitte ersetzen Sie # durch @, wenn Sie eine Meldung senden, und fügen Sie relevante Beweise bei. Bei nachgewiesener Täuschung wird die Website den verdächtigen Inhalt sofort löschen.)