Метод http.Request.Cookie

Метод http.Request.Cookie возвращает cookie с указанным именем из HTTP-запроса. В первый параметр мы передаем имя cookie в виде строки. Метод возвращает указатель на http.Cookie и ошибку error. Если cookie не найдено, возвращается ошибка http.ErrNoCookie. Если cookie найдено, во втором возвращаемом значении будет nil.

Синтаксис

gocookie, err := req.Cookie(name)

Пример

Давайте получим cookie с именем "username" из HTTP-запроса:

gopackage main

import (
  "fmt"
  "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
  cookie, err := r.Cookie("username")
  if err != nil {
    if err == http.ErrNoCookie {
      fmt.Fprintln(w, "Cookie not found")
    } else {
      fmt.Fprintln(w, "Error:", err)
    }
    return
  }
  fmt.Fprintf(w, "Cookie value: %s", cookie.Value)
}

func main() {
  http.HandleFunc("/", handler)
  http.ListenAndServe(":8080", nil)
}

Пример

Давайте проверим наличие cookie с именем "session_id" и обработаем случай, когда cookie отсутствует:

gopackage main

import (
  "fmt"
  "net/http"
)

func checkSession(w http.ResponseWriter, r *http.Request) {
  cookie, err := r.Cookie("session_id")
  if err == http.ErrNoCookie {
    http.Error(w, "Session not found", http.StatusUnauthorized)
    return
  }
  if err != nil {
    http.Error(w, "Server error", http.StatusInternalServerError)
    return
  }
  fmt.Fprintf(w, "Session ID: %s", cookie.Value)
}

func main() {
  http.HandleFunc("/session", checkSession)
  http.ListenAndServe(":8080", nil)
}

Пример

Давайте получим несколько cookie из запроса, используя метод http.Request.Cookie для каждого имени:

gopackage main

import (
  "fmt"
  "net/http"
)

func getCookies(w http.ResponseWriter, r *http.Request) {
  names := []string{"username", "theme", "language"}
  for _, name := range names {
    cookie, err := r.Cookie(name)
    if err == http.ErrNoCookie {
      fmt.Fprintf(w, "%s: not found\n", name)
      continue
    }
    if err != nil {
      fmt.Fprintf(w, "%s: error - %v\n", name, err)
      continue
    }
    fmt.Fprintf(w, "%s: %s\n", name, cookie.Value)
  }
}

func main() {
  http.HandleFunc("/cookies", getCookies)
  http.ListenAndServe(":8080", nil)
}

Смотрите также

  • метод http.Request.Cookies,
    который возвращает все cookie из запроса
  • метод http.Request.AddCookie,
    который добавляет cookie в запрос
  • функцию http.SetCookie,
    которая добавляет cookie в ответ
  • метод http.Request.FormValue,
    который возвращает значение параметра формы