English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этой статье приведен пример использования куки в языке 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 (во время отправки письма, пожалуйста, замените # на @) для сообщения о нарушении и предоставьте соответствующие доказательства. В случае подтверждения факта нарушения, сайт незамедлительно удалит涉嫌侵权的内容。