1 回答
TA贡献1111条经验 获得超0个赞
这完全取决于您使用的存储后端。
该大猩猩/会话包内置了饼干和基于文件的存储。没有基于内存的存储,这与 PHP 的大致相同$_SESSION
。
我的建议:
使用内置 cookie 存储,它使用签名 cookie。它非常适合大多数用途,并且最容易实现。
如果您需要服务器端会话(即在会话中存储大值),请从可用的实现中进行选择- Redis、BoltDB、mySQL、Postgres 等。
我有 Redis 支持的存储 ( redistore )的第一手经验,这很棒。如果您偏爱 BoltDB(基于文件的密钥存储)和 Postgres 存储,它们也是可靠的。
我希望没有点击登录表单上的“记住我”按钮的用户在关闭浏览器后删除他们的会话,而其他所有人都会有一个与他们关联的 cookie。那么大猩猩会话是否能够处理这两种情况,还是在这种情况下我应该使用其他东西?
请注意,所有实现都需要一个“cookie”——这只是 cookie 是否是自包含存储,或者它是否只包含一个引用后端存储中的行/值的标识符。
您可以通过session.Options.MaxAge = 0
按照gorilla/sessions docs 的这一部分进行设置来设置“会话 cookie”(即仅与选项卡/浏览器会话一样长)。
例如
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)
}
希望有帮助。
- 1 回答
- 0 关注
- 201 浏览
添加回答
举报