我写了一个Web应用程序,设置了一个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的名称、值和过期时间。过期时间已更改,但名称和值未更改。
我想删除浏览器中的Cookie以在身份验证系统中退出登录,当用户单击退出登录按钮时删除Cookie。
我还发现了这个链接并遵循其建议,但结果与预期不符。
http.Cookie
结构时,此答案是正确的:https://golang.org/src/net/http/cookie.go - Kelsin