Session 戈朗;Gorilla会话-缓存阻止注销功能

Session 戈朗;Gorilla会话-缓存阻止注销功能,session,caching,go,gorilla,Session,Caching,Go,Gorilla,我已经构建了一个使用Go Gorilla会话包的应用程序。一切似乎都很好,除了注销时我执行的操作 func logout(w http.ResponseWriter, r *http.Request) { session, _ := store.Get(r, "authsesh") session.Values["access"] = "denied" session.Save(r, w) http.Redirect(w, r, "/", 302) return } 由于浏

我已经构建了一个使用Go Gorilla会话包的应用程序。一切似乎都很好,除了注销时我执行的操作

func logout(w http.ResponseWriter, r *http.Request) {
  session, _ := store.Get(r, "authsesh")
  session.Values["access"] = "denied"
  session.Save(r, w)
  http.Redirect(w, r, "/", 302)
  return
}

由于浏览器缓存了需要身份验证的页面,因此注销后仍可访问该页面。我怎样才能避开这个问题?有没有办法防止浏览器缓存页面?cookie没有问题,如果我清除缓存并保留cookie,我可以看到注销已达到预期效果

在处理程序中设置正确的缓存头:

注意,我们为代理和HTTP/1.0客户端设置了多个头

您可以将它们包装到您也可以应用的中间件中:

func NoCache(h http.Handler) http.Handler) {
    fn := func(w http.ResponseWriter, r *http.Request) {
        // Set the headers
    }

    return http.HandlerFunc(fn)
}

// In your router
http.Handle("/user-dashboard", NoCache(http.HandlerFunc(YourDashboardHandler))

在处理程序中设置正确的缓存头:

注意,我们为代理和HTTP/1.0客户端设置了多个头

您可以将它们包装到您也可以应用的中间件中:

func NoCache(h http.Handler) http.Handler) {
    fn := func(w http.ResponseWriter, r *http.Request) {
        // Set the headers
    }

    return http.HandlerFunc(fn)
}

// In your router
http.Handle("/user-dashboard", NoCache(http.HandlerFunc(YourDashboardHandler))