大猩猩会议包混乱

fre*_*lay 0 session go gorilla

来自PHP背景我对Gorilla会话包有点困惑.

Gorilla的行为与PHP 相似$_SESSION['name']或类似$_COOKIE['name']吗?

我正在尝试使用两种方法为我的Go Web应用程序创建用户会话,但我不确定Gorilla会话是否是一个很好的包使用.我希望没有点击登录表单上的"记住我"按钮的用户在关闭浏览器后删除会话,而其他人都会有一个与之关联的cookie.那么Gorilla会话能够处理这两种情况,还是我应该在这种情况下使用其他东西?

eli*_*rar 5

它完全取决于您使用的存储后端.

大猩猩/会话包内置了饼干和基于文件的存储.没有基于内存的商店,这与PHP大致相同$_SESSION.

我的建议:

  • 使用内置的cookie商店,它使用签名的cookie.它非常适合大多数用途,并且最容易实现.
  • 如果您需要服务器端会话(即在会话中存储大值),请从可用的实现中选择 - Redis,BoltDB,mySQL,Postgres等.

我有Redis支持的商店(redistore)的第一手经验,这非常棒.如果您对这些商店有偏好,BoltDB(基于文件的密钥库)和Postgres商店也是可靠的.

我希望没有点击登录表单上的"记住我"按钮的用户在关闭浏览器后删除会话,而其他人都会有一个与之关联的cookie.那么Gorilla会话能够处理这两种情况,还是我应该在这种情况下使用其他东西?

请注意,所有实现都需要一个"cookie" - 它只是cookie是自包含存储,还是只包含一个引用后端存储中的行/值的标识符.

您可以通过设置设为"会话cookie"(即只持续只要标签/浏览器会话),session.Options.MaxAge = 0大猩猩/会话文档的这一部分.

例如

func MyHandler(w http.ResponseWriter, r *http.Request) {
    session, err := store.Get(r, "session-name")
    if err != nil {
        http.Error(w, err.Error(), 500)
        return
    }

    // Add your logic to check the r.FormValue for your remember_me checkbox.

    // Temporary session
    session.Options.MaxAge = 0

    // Set some session values.
    session.Values["user"] = someUser
    // Save it before we write to the response/return from the handler.
    session.Save(r, w)
}
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.