为了账号安全,请及时绑定邮箱和手机立即绑定

如何删除cookie

如何删除cookie

Go
翻过高山走不出你 2021-09-10 15:32:47
我编写了一个设置 cookie 并删除它的 Web 应用程序。为了阐明我的意思,请查看以下代码片段。package mainimport (    "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 location 时,它将按预期设置一个 cookie。然后当我调用 /delete 时,它应该更改 cookie 的名称、值和过期时间。过期时间已更改,但名称和值未更改。我想要的是,当用户单击注销按钮删除 cookie 时,从浏览器中删除 cookie 以在身份验证系统中注销。我也发现了这个链接并遵循了建议,但没有按预期工作。
查看完整描述

3 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

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


deleteCookieHandler() 应该如下


c := &http.Cookie{

    Name:     "storage",

    Value:    "",

    Path:     "/",

    Expires: time.Unix(0, 0),


    HttpOnly: true,

}


http.SetCookie(rw, c)


查看完整回答
反对 回复 2021-09-10
?
手掌心

TA贡献1942条经验 获得超3个赞

Cookie 以名称为键,因此当您“更改”名称时,实际上是“创建”了另一个已过期的 cookie。

保持名称不变,它应该可以工作,但不要忘记每天花一些时间阅读有关 cookie 及其工作原理的信息。


查看完整回答
反对 回复 2021-09-10
?
慕斯709654

TA贡献1840条经验 获得超5个赞

MaxAge=0表示未指定“Max-Age”属性。


MaxAge<0表示现在删除 cookie,相当于 'Max-Age: 0'


MaxAge>0表示 Max-Age 属性存在并以秒为单位给出


c := &http.Cookie{

    Name:     "storage",

    Value:    "",

    Path:     "/",

    MaxAge:   -1,

    HttpOnly: true,

}


http.SetCookie(rw, c)


查看完整回答
反对 回复 2021-09-10
  • 3 回答
  • 0 关注
  • 283 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信