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

Анализ использования Cookie в Go

В этой статье приведен пример использования куки в языке Go. Поделюсь с вами для вашего ознакомления, подробности следующие:

Разработка веб-приложений не может обойтись без работы с куки. Библиотека http в Go также предоставляет операции с куки.

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
}

Поле Name является именем cookie, Value — его значение, а剩下的 Path и Domain — это диапазон хранения cookie. Expires — время истечения срока действия cookie, если его не установить, то это сессийный cookie, то есть cookie, связанный с сеансом браузера, который будет удален, как только браузер будет закрыт.

Установка Cookie

cookie является частью заголовка, поэтому можно использовать метод Header для установки cookie.

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

Здесь также можно протестировать различия между методами Set и Add. Naturally, как и в случае с загрузкой файла, Go предоставляет常用的 инструментальные функции.

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

Метод SetCookie HTTP также может устанавливать cookie, поэтому не нужно учитывать порядок следования Set и Add, естественно, вторым параметром является объект指针 Cookie. Установив cookie, следующим шагом будет чтение cookie.

Чтение Cookie

Есть много способов чтения cookie, они заключены в header, конечно, можно обрабатывать их через метод header.

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

Не используя метод Header, можно также использовать метод Request:

func getCookieHandler(w http.ResponseWriter, r *http.Request) {
    c1, err := r.Cookie("first_cookie")
    if err != nil{
        fmt.Fprintln(w, "Не удалось получить cookie")
    }
    cs := r.Cookies()
    fmt.Fprintln(w, c1)
    fmt.Fprintln(w, cs)
}

Во время доступа можно обнаружить, что r.Cookie возвращает значение для ключа, а r.Cookies возвращает значения всех ключей cookie.

Cookie и сообщения

Роль cookie очень велика, обычно они записывают некоторые данные клиента, чтобы проверять вход пользователя. В настоящее время нам нужно использовать cookie для создания небольшой функции - сообщения. Обычно после отправки web-запроса, ответ возвращает данные, но также можно установить сообщения для указания пользователю.

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, "Не найдено сообщение")
        }
    } 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))
    }
}

Функция setMessageHandler очень проста, это создание экземпляра cookie и写入 сообщение в cookie, а затем возврат его клиенту.

getMessageHandler сначала читает cookie с ключом flash, если не было найдено содержимое, это означает, что сообщение не существует, в противном случае создается другой cookie, устанавливается время его окончания, которое равно удалению cookie. Затем передается возвращенное сообщение клиенту. Завершено сообщение передачи.

Заключение

Мы обсуждали основные приложения cookie в Go. В современном веб-разработке люди все больше重视网络安全, поэтому безопасность cookie также стала объектом внимания пользователей. Оригинальное упаковка cookie в Go сравнительно проста. Однако сообщество Go разработало множество решений, таких как secure cookie, например, библиотека gorilla/securecookie. В реальном разработке могут быть использованы библиотеки или пакеты третьих сторон для реализации функций.

Надеюсь, что описанное в этой статье поможет вам в разработке программ на языке Go.

Заявление: содержание этой статьи взято из интернета, авторские права принадлежат соответствующему владельцу. Контент был предложен и загружен пользователями Интернета. Этот сайт не обладает правами собственности, не производил редактирование контента вручную и не несет ответственности за него. Если вы обнаружите содержимое,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма, пожалуйста, замените # на @) для сообщения о нарушении и предоставьте соответствующие доказательства. В случае подтверждения факта нарушения, сайт незамедлительно удалит涉嫌侵权的内容。

Основной учебник
Рекомендуем также