Cookies 无法使cookie过期
我正在玩Go应用程序引擎SDK,我正在尝试设置/过期Cookies 设置Cookie没有问题,但不可能使其在浏览器中过期 该应用程序基于一个Cookies 无法使cookie过期,cookies,go,Cookies,Go,我正在玩Go应用程序引擎SDK,我正在尝试设置/过期Cookies 设置Cookie没有问题,但不可能使其在浏览器中过期 该应用程序基于一个negroni实例: func init() { app := negroni.New() app.UseHandler(Router()) http.Handle("/", app) } 路由器是一个mux实例: func Router() *mux.Router { r := mux.NewRouter()
negroni
实例:
func init() {
app := negroni.New()
app.UseHandler(Router())
http.Handle("/", app)
}
路由器是一个mux
实例:
func Router() *mux.Router {
r := mux.NewRouter()
subRouter := r.PathPrefix(PATH_PREFIX).Subrouter()
subRouter.HandleFunc("/sign", LoginHandler)
subRouter.HandleFunc("/userinfo", UserInfo)
subRouter.HandleFunc("/logout", Logout)
return r
}
登录处理程序是基本的:
func LoginHandler(w http.ResponseWriter, r *http.Request) {
ctx := appengine.NewContext(r)
u := user.Current(ctx)
if u == nil {
url, err := user.LoginURL(ctx, r.URL.String())
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.Header().Set("Location", url)
w.WriteHeader(http.StatusFound)
return
}
//COOKIE_ID = "SomeString"
cookie := &http.Cookie{Name: COOKIE_ID, Value: u.ID, Path: "/", MaxAge: 0}
http.SetCookie(w, cookie)
w.Header().Set("Location", "/")
w.WriteHeader(http.StatusFound)
}
要使cookie过期,请执行以下操作:
func Logout(w http.ResponseWriter, r *http.Request) {
ctx := appengine.NewContext(r)
url, err := user.LogoutURL(ctx, "/")
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
expiredCookie := &http.Cookie{Name: COOKIE_ID, MaxAge: -10, Expires: time.Now()}
http.SetCookie(w, expiredCookie)
w.Header().Set("Location", url)
w.WriteHeader(http.StatusFound)
}
我什么都试过了:
- 获取旧cookie,更改MaxAge并过期
- 创建具有相同名称的新cookie以覆盖
无论如何,cookie仍然保留在导航器中。我做错了什么?浏览器为多个路径存储cookie。在cookie头上设置path属性,以匹配用于创建cookie的path属性 将最大年龄设置为负值以清除cookie。如果“最大年龄”属性等于零,则不会在标头上设置该属性 某些浏览器不理解“最大年龄”属性。将过期时间设置为过去的某个时间,以利于这些浏览器
expiredCookie := &http.Cookie{Path: "/", Name: COOKIE_ID, MaxAge: -1, Expires: time.Now().Add(-100 * time.Hour)}