session - Gorilla session 包混淆

标签 session go gorilla

来自 PHP 背景,我对 Gorilla session 包有点困惑。

Gorilla 的行为类似于 $_SESSION['name'] 还是类似于 PHP 的 $_COOKIE['name']

我正在尝试使用这两种方式为我的 Go 网络应用程序创建用户 session ,但我不确定 Gorilla session 是否是一个很好的包。我希望那些没有点击登录表单上的“记住我”按钮的用户在关闭浏览器后删除他们的 session ,而其他人都会有一个与他们相关联的 cookie。那么 Gorilla session 是否能够处理这两种情况,或者在这种情况下我应该使用其他方法吗?

最佳答案

这完全取决于您使用的存储后端。

gorilla/sessions包有内置的 cookie 和基于文件系统的商店。没有基于内存的存储,这大致就是 PHP 的 $_SESSION

我的建议:

  • 使用内置的 cookie 存储,它使用签名的 cookie。它非常适合大多数用途,并且最容易实现。
  • 如果您需要服务器端 session (即在 session 中存储大值),pick from the available implementations - Redis、BoltDB、mySQL、Postgres等

我有使用 Redis 支持的存储 ( redistore ) 的第一手经验,这非常棒。如果您有偏好,BoltDB(基于文件的 key 存储)和 Postgres 存储也很可靠。

I want the users who didn't click on the "remember me" button on the login form to have their session erased after closing their browser, whereas everyone else will have a cookie associated with them. So would Gorilla sessions be able to handle both scenarios or should I use something else in this case?

请注意,所有实现都需要一个“cookie”——只是 cookie 是自包含存储,还是它仅包含一个标识符,该标识符引用后端存储中的行/值。

您可以根据 this part of the gorilla/sessions docs 设置 session.Options.MaxAge = 0 来设置“ session cookie”(即仅与选项卡/浏览器 session 一样长) .

例如

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)
}

希望对您有所帮助。

关于session - Gorilla session 包混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31952033/

相关文章:

go - 如何使用 gorilla 处理程序允许移动设备上的 OPTIONS 方法?

go - 重复 formData 到 Go 结构

php - 设置 cookie 并插入数据库时​​遇到问题

django - 在 Django 单元测试中使用 session 对象

golang 测试命令行参数

arrays - Golang 最佳实践 : empty array response or error?

go - 当我导航到其他页面时发送 WebSocket 错误关闭

java - Vaadin 7 - 好的框架,但不适用于我的项目

java - 玩吗!框架有任何内置机制来防止 session 劫持吗?

go - MessageImpl 没有实现 Message