猿问

如何删除cookie

我编写了一个设置 cookie 并删除它的 Web 应用程序。为了阐明我的意思,请查看以下代码片段。


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

我想要的是,当用户单击注销按钮删除 cookie 时,从浏览器中删除 cookie 以在身份验证系统中注销。
我也发现了这个链接并遵循了建议,但没有按预期工作。

翻过高山走不出你
浏览 284回答 3
3回答

桃花长相依

要删除名为“storage”的 cookie,发送具有相同 cookie 名称的 set-cookie。deleteCookieHandler() 应该如下c := &http.Cookie{    Name:     "storage",    Value:    "",    Path:     "/",    Expires: time.Unix(0, 0),    HttpOnly: true,}http.SetCookie(rw, c)

手掌心

Cookie 以名称为键,因此当您“更改”名称时,实际上是“创建”了另一个已过期的 cookie。保持名称不变,它应该可以工作,但不要忘记每天花一些时间阅读有关 cookie 及其工作原理的信息。

慕斯709654

MaxAge=0表示未指定“Max-Age”属性。MaxAge<0表示现在删除 cookie,相当于 'Max-Age: 0'MaxAge>0表示 Max-Age 属性存在并以秒为单位给出c := &http.Cookie{&nbsp; &nbsp; Name:&nbsp; &nbsp; &nbsp;"storage",&nbsp; &nbsp; Value:&nbsp; &nbsp; "",&nbsp; &nbsp; Path:&nbsp; &nbsp; &nbsp;"/",&nbsp; &nbsp; MaxAge:&nbsp; &nbsp;-1,&nbsp; &nbsp; HttpOnly: true,}http.SetCookie(rw, c)
随时随地看视频慕课网APP

相关分类

Go
我要回答