无法过期一个cookie。

4

我正在使用Go应用程序引擎SDK,并尝试设置/过期Cookie。

设置Cookie没有问题,但是无法使其在浏览器中过期。

该应用程序基于一个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)
}

我尝试了以下方法:
1. 获取旧的cookie,更改MaxAge和Expires 2. 创建一个新的同名cookie来覆盖旧的
完整代码请参见:https://gist.github.com/yageek/78e43c83b56467fc8338 无论如何,在浏览器中cookie仍然存在。我做错了什么?
1个回答

8

浏览器会为多个路径存储cookie。在cookie标头上设置路径属性,以匹配用于创建cookie的路径属性。

将最大年龄设置为负值,以清除cookie。如果等于零,则最大年龄属性不会设置在标头上。

某些浏览器不理解最大年龄属性。为了使这些浏览器受益,请将过期时间设置为过去的时间。

expiredCookie := &http.Cookie{Path: "/", Name: COOKIE_ID, MaxAge: -1, Expires: time.Now().Add(-100 * time.Hour)}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接