gorilla/sessions 当 MaxAge 为 0 时无法保存新会话

gorilla/sessions fails to save new session when MaxAge is 0

我在玩具应用程序中使用 gorilla/sessions,我想使用 FilesystemStore,但是如果我将商店的 MaxAge 选项设置为 0,它会尝试删除会话保存时,但如果会话是新的,则它没有 ID:

    sess, err := s.store.Get(r, "session-name")
    if err != nil {
        log.Printf("error getting session %v", err)
        http.Error(w, "session", http.StatusInternalServerError)
        return
    }

    sess.Values["name"] = r.FormValue("name")
    if err = sess.Save(r, w); err != nil {
        log.Printf("error saving session %v", err)
        http.Error(w, "saving", http.StatusInternalServerError)
        return
    }

    http.Redirect(w, r, "/view", http.StatusFound)

我得到的错误是:

2019/10/15 09:22:03 error saving session remove sessions\session_: The system cannot find the file specified.

查看 Gorilla 代码,Gorilla 代码似乎在确定会话是否具有 ID 之前尝试从存储中删除会话。

我的问题是 Gorilla 问题还是我的使用方式问题?

不将 MaxAge 设置为 0 时一切正常,但我必须自己管理 cookie。

如果您选中 Save method,您会看到它试图删除与 MaxAge <= 0 的会话。您实际上标记了需要以这种方式删除的会话。 由于您正在使用 s.store.Get(r, "session-name") 创建会话,它将使用该商店的 MaxAge,您应该将其设置为大于 0 的某个值。

设置 MaxAge 的文档说:

Individual sessions can be deleted by setting Options.MaxAge = -1 for that session.

但是在保存中你可以看到:

If the Options.MaxAge of the session is <= 0 then the session file will be deleted from the store path.

因此,将其设置为 0 与将其设置为 -1 或任何其他负值相同。