cookies - 如何删除cookie

标签 cookies go

我编写了一个设置 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。然后当我调用/delete 时,它​​应该更改 cookie 的名称、值和过期时间。过期时间已更改,但名称和值未更改。

enter image description here

我想要的是,当用户单击退出按钮删除 cookie 时,从浏览器中删除用于在身份验证系统中退出的 cookie。
我还发现 this link并遵循建议,但未按预期工作。

最佳答案

要删除名为“storage”的 cookie,发送具有相同 cookie 名称的 set-cookie。

deleteCookieHandler()应该如下所示

c := &http.Cookie{
    Name:     "storage",
    Value:    "",
    Path:     "/",
    Expires: time.Unix(0, 0),

    HttpOnly: true,
}

http.SetCookie(rw, c)

关于cookies - 如何删除cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27671061/

相关文章:

amazon-web-services - Base64解码编码,得到不同的数据

go - 用golang解析时间:无法解析“-08-23 +

angularjs - 如何访问 AngularJS 中 Passportjs 设置的 Cookie

Go xml.Unmarshal 仅获取列表的最后一项

go - 如何拆分传递给方法的接口(interface)

python - 保存使用 keras 训练的 TF 模型,然后在 Go 中进行评估

Perl - 重定向和设置 cookie 时的重定向循环

node.js - Express.js : Cookie being saved late

c# - 在 .NET 2.0 (C#) 中加密/解密 cookie

go - 如何获取目录总大小?