РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1038 of 1593 menu

Тип http.Cookie

Тип http.Cookie представляет HTTP-куки, которые используются для хранения состояния между запросами. Структура содержит поля для имени Name и значения Value, а также дополнительные параметры: Path, Domain, Expires, MaxAge, Secure, HttpOnly и другие.

Структура http.Cookie

type Cookie struct { Name string Value string Path string Domain string Expires time.Time MaxAge int Secure bool HttpOnly bool SameSite SameSite }

Поле Name задает имя куки, Value - ее значение. Поле Expires устанавливает дату истечения срока действия, а MaxAge - время жизни в секундах. Флаги Secure и HttpOnly определяют доступность куки.

Создание и установка куки

Давайте создадим куку и установим ее в ответе:

package main import ( "fmt" "net/http" "time" ) func main() { cookie := &http.Cookie{ Name: "username", Value: "john_doe", Path: "/", Expires: time.Now().Add(24 * time.Hour), HttpOnly: true, } http.HandleFunc("/set", func(w http.ResponseWriter, r *http.Request) { http.SetCookie(w, cookie) fmt.Fprintln(w, "Cookie set successfully") }) http.ListenAndServe(":8080", nil) }

Функция http.SetCookie добавляет заголовок Set-Cookie в ответ. Кука будет доступна по пути "/" и истечет через 24 часа.

Чтение куки из запроса

Чтобы получить куку из запроса, используется метод Request.Cookie:

package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/get", func(w http.ResponseWriter, r *http.Request) { cookie, err := r.Cookie("username") if err != nil { http.Error(w, "Cookie not found", http.StatusBadRequest) return } fmt.Fprintf(w, "Cookie value: %s", cookie.Value) }) http.ListenAndServe(":8080", nil) }

Метод возвращает указатель на http.Cookie и ошибку, если кука не найдена. Полученное значение можно использовать в обработчике.

Работа с несколькими куками

Для получения всех кук используется метод Request.Cookies:

package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/list", func(w http.ResponseWriter, r *http.Request) { cookies := r.Cookies() for _, c := range cookies { fmt.Fprintf(w, "Name: %s, Value: %s\n", c.Name, c.Value) } }) http.ListenAndServe(":8080", nil) }

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

Name: username, Value: john_doe Name: session_id, Value: abc123

Метод возвращает срез всех кук, переданных в запросе. Каждая кука представлена структурой http.Cookie.

Удаление куки

Чтобы удалить куку, необходимо установить ее с истекшим сроком действия:

package main import ( "net/http" "time" ) func main() { http.HandleFunc("/delete", func(w http.ResponseWriter, r *http.Request) { cookie := &http.Cookie{ Name: "username", Value: "", Path: "/", Expires: time.Unix(0, 0), MaxAge: -1, } http.SetCookie(w, cookie) w.Write([]byte("Cookie deleted")) }) http.ListenAndServe(":8080", nil) }

Для удаления куки используются поля Expires с нулевым временем и MaxAge со значением -1.

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

  • тип http.Request,
    содержащий методы работы с куками
  • функцию http.SetCookie,
    которая добавляет куку в HTTP-ответ
  • метод http.Request.Cookie,
    который возвращает конкретную куку из запроса
  • метод http.Request.Cookies,
    который возвращает все куки из запроса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить