【问题标题】:Get existing gorilla sessions获取现有的 gorilla 会话
【发布时间】:2014-11-22 17:57:38
【问题描述】:

我正在尝试设置一个 gorilla 会话,然后再次检索该值。我正在做以下测试。

//create session and store in http Cookies
session, err := store.Get(req, "session")
if err != nil {
    errCode = http.StatusInternalServerError
    return
}

//save a value
session.Values["user_id"] = userTuple.UserId
err = session.Save(req, w)
if err != nil {
    errCode = http.StatusInternalServerError
    return
}

//try to get the same session that was just created
nr := http.Request{Header: w.Header()}
session, err = store.Get(&nr, "session")
if err != nil {
    errCode = http.StatusInternalServerError
    return
} else if session.IsNew {
    log.Println("New session created instead of old one.")
}

这是一个更大的 HTTP 处理程序的 sn-p。但是相关部分已发布,对store.Get() 的第二次调用不是返回现有会话,而是返回一个全新的会话。因此,当执行此代码所在的处理程序时,日志语句将打印到控制台。

为什么在这种情况下我得到一个新会话而不是我已经创建和保存的会话?

【问题讨论】:

  • 你用的是什么商店?
  • 不,这是不同的代码。我第一次发布了错误的代码。同样的问题,不同的问题。
  • 我正在使用 CookieStore

标签: http session go gorilla


【解决方案1】:

以下代码不起作用,因为实际季节值保存在写入ResponseWriter的cookie中,复制:

nr := http.Request{Header: w.Header()}
session, err = store.Get(&nr, "session")

保存代码为https://github.com/gorilla/sessions/blob/master/store.go#L101

由于某些奇怪的原因,它会根据请求指针存储季节 ID,请查看 https://github.com/gorilla/context/blob/master/context.go#L31

您必须重新加载页面才能访问新的 cookie。

【讨论】:

    【解决方案2】:

    我觉得我已经回答了这个问题。您在滥用此 pkg。在幕后,context 包用于存储请求的状态,通过创建一个新的、不完整的 http.Request,上下文包返回一个没有会话信息的空状态。

    看看这个code 看看我在说什么。

    【讨论】:

    • 感谢您的帮助。由于某种原因,我仍在试图弄清楚,不完整的响应不起作用。
    【解决方案3】:

    我不认为这与 gorilla/sessions 有任何关系,而是与您构建请求结构的方式有关。

    当您调用session.Save(r, w) 时,w.Header() 现在将包含如下地图:

    map[string][]string{
      // ...
      "Set-Cookie": []string{/* ... */}
      // ...
    }
    

    您应该将 Set-Cookie 标头替换为 Cookie 标头 - 否则,gorilla/sessions 不会在请求中看到任何 cookie,并会假定该请求没有会话 cookie。

    但是,就像@OneOfOne 提到的那样,您通常只需调用http.Redirect 并让浏览器为您执行Set-Cookie-Cookie 替换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-09
      • 2015-05-03
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-22
      • 2014-03-18
      相关资源
      最近更新 更多