Метод http.Request.Cookies

Метод http.Request.Cookies возвращает срез всех cookie-файлов, которые были переданы в HTTP-запросе. Каждый cookie представлен указателем на структуру http.Cookie. Если в запросе нет ни одного cookie, метод возвращает пустой срез (не nil). В отличие от метода http.Request.Cookie, этот метод не возвращает ошибку, а просто предоставляет все доступные cookie.

Синтаксис

gofunc (r *Request) Cookies() []*Cookie

Пример

Давайте создадим простой HTTP-сервер, который обрабатывает запрос и выводит все переданные cookie:

gopackage main

import (
  "fmt"
  "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
  cookies := r.Cookies()
  fmt.Printf("Total cookies: %d\n", len(cookies))

  for i, c := range cookies {
    fmt.Printf("Cookie %d: %s = %s\n", i+1, c.Name, c.Value)
  }
}

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

Результат выполнения кода при запросе с двумя cookie:

go"Total cookies: 2"
"Cookie 1: session_id = abc123"
"Cookie 2: user_pref = dark_mode"

Пример

Давайте обработаем запрос без cookie и проверим, что метод возвращает пустой срез:

gopackage main

import (
  "fmt"
  "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
  cookies := r.Cookies()
  if len(cookies) == 0 {
    fmt.Println("No cookies found in request")
  } else {
    fmt.Printf("Found %d cookies\n", len(cookies))
  }
}

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

Результат выполнения кода для запроса без cookie:

go"No cookies found in request"

Пример

Давайте получим все cookie и найдем среди них конкретный по имени:

gopackage main

import (
  "fmt"
  "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
  cookies := r.Cookies()
  var token string

  for _, c := range cookies {
    if c.Name == "auth_token" {
      token = c.Value
      break
    }
  }

  if token != "" {
    fmt.Printf("Auth token found: %s\n", token)
  } else {
    fmt.Println("Auth token not found")
  }
}

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

Результат выполнения кода при наличии cookie auth_token:

go"Auth token found: xyz789token"

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

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