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

我在玩具应用程序中使用 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。


交互式爱情
浏览 114回答 1
1回答

慕田峪9158850

如果您检查Savemethod,您会看到它尝试删除与 的会话MaxAge <= 0。实际上,您可以通过这种方式标记需要删除的会话。由于您正在使用 来创建会话s.store.Get(r, "session-name"),因此它将使用该存储中的 MaxAge,并且您应该将其设置为大于 0 的值。设置 MaxAge 的文档说:可以通过为该会话设置 Options.MaxAge = -1 来删除单个会话。但在保存中你可以看到:如果会话的Options.MaxAge <= 0,则会话文件将从存储路径中删除。因此,将其设置为 0 与将其设置为 -1 或任何其他负值相同。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go