Я установил cookie из javascript, например:
setCookie("appointment", JSON.stringify({
appointmentDate: selectedDay.date,
appointmentStartMn: appointment.mnRange[0],
appointmentId: appointment.id || 0,
appointmentUserId: appointment.user.id || 0
})
);
После установки cookie я хочу перенаправить пользователя на страницу бронирования:
window.location.href = "https://localhost:8080/booking/"
Функция setCookie:
function setCookie(cookieName, cookieValue) {
document.cookie = `${cookieName}=${cookieValue};secure;`;
}
Я бы хотел получить этот cookie из моего внутреннего интерфейса, но не могу понять, как это сделать. Я читал об этом вопросе, так как никогда раньше не использовал куки, но ответы, похоже, говорят о том, что мне не нужно ничего делать, кроме настройки document.cookie.
В моем браузере я вижу, что cookie действительно установлен так, как ожидалось.
В моем бэкэнде я хочу напечатать cookie:
r.HandleFunc("/booking/", handler.serveTemplate)
func (handler *templateHandler) serveTemplate(w http.ResponseWriter, r *http.Request) {
c, err := r.Cookie("appointment")
if err != nil {
fmt.Println(err.Error())
} else {
fmt.Println(c.Value)
}
}
//output http: named cookie not present
Что конкретно мне не хватает? Я думаю, что запутываю локальные / http cookie, но как добиться чтения файлов cookie, установленных клиентом?
ОБНОВЛЕНИЕ (подробнее см. Ответ)
Это не имеет ничего общего с Голангом. Мой:
appointmentDate: selectedDay.date
То, что отформатировано как 2019-01-01
и -
, не является допустимым символом, который можно отправить на сервер. Он работал в моем браузере, но для его передачи необходимо закодировать URI.
Вот так и вышло:
`${cookieName}=${encodeURIComponent(cookieValue)};secure;` + "path=/";`
И на ходу (не поймал здесь ошибку, чтобы сэкономить место):
cookie, _ := r.Cookie("appointment")
data, _ := url.QueryUnescape(cookie.Value)