我在玩具應(yīng)用程序中使用 gorilla/sessions,并且我想使用 FilesystemStore,但如果我將MaxAge存儲選項設(shè)置為 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不設(shè)置時一切正常0,但隨后我必須自己管理cookie。
1 回答

慕田峪9158850
TA貢獻1794條經(jīng)驗 獲得超8個贊
如果您檢查Save
method,您會看到它嘗試刪除與 的會話MaxAge <= 0
。實際上,您可以通過這種方式標記需要刪除的會話。由于您正在使用 來創(chuàng)建會話s.store.Get(r, "session-name")
,因此它將使用該存儲中的 MaxAge,并且您應(yīng)該將其設(shè)置為大于 0 的值。
設(shè)置 MaxAge 的文檔說:
可以通過為該會話設(shè)置 Options.MaxAge = -1 來刪除單個會話。
但在保存中你可以看到:
如果會話的Options.MaxAge <= 0,則會話文件將從存儲路徑中刪除。
因此,將其設(shè)置為 0 與將其設(shè)置為 -1 或任何其他負值相同。
- 1 回答
- 0 關(guān)注
- 169 瀏覽
添加回答
舉報
0/150
提交
取消