【问题标题】:Why does this gorilla session code not work?为什么这个大猩猩会话代码不起作用?
【发布时间】:2015-03-11 04:21:28
【问题描述】:

我是一个 golang 菜鸟,所以我正在通过为基于 gorilla 的网络应用程序设置一个种子项目来制作我的第一个玩具应用程序。进展顺利,但会话代码没有像我预期的那样工作,here is the full code,这里只是相关的 sn-p:

func getMyCounter(w http.ResponseWriter, r *http.Request){
    session, _ := sessionStore.Get(r, counterSession)
    if session.IsNew {
        session.Values[myCounter] = 0
    }
    val := session.Values[myCounter].(int)
    log.Printf("getMyCounter %d", val)
    m := make(map[string]int)
    m["counter"] = val
    js, _ := json.Marshal(m)
    w.Header().Set("Content-Type", "application/json")
    w.Write(js)
}

func incrementMyCounter(w http.ResponseWriter, r *http.Request){
    log.Println("incrementMyCounter")
    session, _ := sessionStore.Get(r, counterSession)
    if session.IsNew {
        session.Values[myCounter] = 0
    }
    val := session.Values[myCounter].(int)
    session.Values[myCounter] = val + 1
    getMyCounter(w, r)
}

我对 getMyCounter 和 incrementMyCounter 的调用总是返回 0

【问题讨论】:

  • 你没有打电话给session.Save(r, w)
  • ....这很尴尬。谢谢:)

标签: session go gorilla


【解决方案1】:

感谢 JimB 指出令人痛苦的显而易见的事情,我需要在创建/编辑会话后添加对 session.Save(r, w) 的调用。

【讨论】:

  • 只是补充一点:如果您有任何控制流(例如,您提前返回),您需要在您之前调用session.Save(r, w):a)离开处理程序和/或 b)写入 ResponseWriter .
猜你喜欢
  • 2014-03-15
  • 1970-01-01
  • 2014-11-24
  • 1970-01-01
  • 2015-03-30
  • 1970-01-01
  • 2019-12-13
  • 2018-06-08
  • 2017-06-28
相关资源
最近更新 更多