Я написал веб-приложение, которое устанавливает куки-файл и удаляет его. Чтобы уточнить сценарий, я имею в виду следующий фрагмент кода.Как удалить cookie
package main
import (
"fmt"
"github.com/gorilla/mux"
"net/http"
"time"
)
func rootHandler(rw http.ResponseWriter, r *http.Request) {
fmt.Fprintf(rw, "Hello Foo")
}
func setCookieHandler(rw http.ResponseWriter, r *http.Request) {
c := &http.Cookie{
Name: "storage",
Value: "value",
Path: "/",
MaxAge: 0,
HttpOnly: true,
}
http.SetCookie(rw, c)
}
func deleteCookieHandler(rw http.ResponseWriter, r *http.Request) {
c, err := r.Cookie("storage")
if err != nil {
panic(err.Error())
}
c.Name = "Deleted"
c.Value = "Unuse"
c.Expires = time.Unix(1414414788, 1414414788000)
}
func readCookieHandler(rw http.ResponseWriter, r *http.Request) {
c, err := r.Cookie("storage")
if err != nil {
panic(err.Error())
}
fmt.Println(c.Expires)
}
func evaluateCookieHandler(rw http.ResponseWriter, r *http.Request) {
c, err := r.Cookie("storage")
if err != nil {
panic(err.Error())
}
if time.Now().After(c.Expires) {
fmt.Println("Cookie is expired.")
}
}
func main() {
mux := mux.NewRouter()
mux.HandleFunc("/", rootHandler)
mux.HandleFunc("/cookie", setCookieHandler)
mux.HandleFunc("/delete", deleteCookieHandler)
mux.HandleFunc("/read", readCookieHandler)
mux.HandleFunc("/eval", evaluateCookieHandler)
http.ListenAndServe(":3000", mux)
}
Как вы можете видеть, когда я нахожусь в месте нахождения/cookie, он будет установлен как файл cookie. Затем, когда я вызываю/удаляю, он должен изменить имя, значение и истекшее время из файла cookie. Истекшее время изменяется, но имя и значение нет.
Что я хочу, чтобы удалить куки из браузера для знака в системе аутентификации, когда пользователь нажимает кнопку выйти, чтобы удалить куки.
Я также обнаруживаю this link и следую советам, но не работает должным образом.
Прежде всего, спасибо за ответ. Вы имеете в виду, что я должен установить только срок действия поля? –
Истекает должно быть достаточно. Установка пустого или «короткого» значения помогает сократить полезную нагрузку и избежать утечки данных в некоторых случаях. –
Не используйте поле Expires, вместо этого используйте отрицательный Max-Age. Причина: гораздо более здравый, меньше трафика, работает с несинхронизированными часами. Еще одна вещь, на которую нужно обратить внимание: Cookies не только связаны по имени, но и по пути (и домену): задайте явно во время удаления. – Volker